根据第二个参数,我试图编写一个做不同事情的函数。但我一直都在犯错误。根据矩阵的维数,函数应该执行不同的任务。下面是一个例子
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))
我发现了一个错误:
Error in drop && !has.j : invalid 'x' type in 'x && y'
发布于 2013-11-19 02:18:34
hnrstr<-1
将1的值赋值给hnrstr
。您不希望在if
语句中出现这种情况。您的意思是“测试hnrstr小于-1”,在这种情况下添加一些空格。hnrstr < -1
,或者您的意思是“测试hnrstr等于1”,在这种情况下,使用double等于,hnsstr == 1
。
如果X1
,X2
和X3
是向量,那么x
就是一个矩阵。也就是说,它有两个维度。这意味着,在您分配了y <- x
(为什么需要这样做?)之后,y[ ,"X2","X3"])
没有多大意义,因为它意味着存在三个维度,而不是两个维度。这就是导致错误的原因。你是说y[, c("X2","X3")])
吗
gsub
接受一个向量,所以在更改了前面的代码之后,还需要更改对该函数的调用。您想把它传递给第二列还是第三列,还是两者都传递(一个接一个)?
如果第二个街区看上去毫无意义。想一想你怎么能把它们移除。
if (hnrstr<-1){
x<-y
}
if (hnrstr<-2){
x<-P
}
在函数的末尾不需要一个return
语句。R自动返回函数中计算的最后一个值。
正如科林所说,不要试图把你的函数称为“函数”。那只是自找麻烦。换行
function <- function(x,hnrstr){
https://stackoverflow.com/questions/20067628
复制相似问题