Pisanie funkcji R przy pomocy środowiska

Próbuję napisać funkcję, która robi różne rzeczy, w zależności od drugiego argumentu. Ale cały czas dostaję błąd. W zależności od wymiaru macierzy funkcja powinna wykonywać różne zadania. Oto przykład

x<-cbind(X1,X2,X3)

function<-function(x,hnrstr){
  if (hnrstr<-1){ 
    x<-data.frame(X1=x[1],X2=x[2],X3=x[3])
    y<-x 
    y[ ,"X2","X3"]<- gsub(" {2, }"," ",y[ ,"X2","X3"])       
  }

  if (hnrstr<-2){ 
    x<-data.frame(X1=x[1],X2=x[2])
    P<-x 
  }  
  if (hnrstr<-1){
    x<-y
  }
  if (hnrstr<-2){
    x<-P  
  }
  return(x)
}

apply(x,c(3,3), function(x,1))

Dostaję błąd:

Error in drop && !has.j : invalid 'x' type in 'x && y'

questionAnswers(1)

yourAnswerToTheQuestion