if函数后的R中长度为零的参数

时间:2012-03-22 18:26:53

标签: r

运行下面的代码后,我得到一个长度为零的参数。我已经查看过这个问题的其他用户,但是我无法弄清楚错误。

gi <- pm%*%t(pm); #creates a 5k by 5k matrix by multiplying matrix by its transpose
dim(gi); # checks dimensions of matrix
ngen <- dim(pm)[1];
select <- matrix(F,ncol=ngen,nrow=ngen);
for(i in 1:(ngen-1)){
    for(ii in (i+1):ngen){
        if(gi[i,ii] < llim){
            next;
        }
        hit1 <- p.sum[i];
        hit2 <- p.sum[ii];
        if(gi[i,ii] >= qmat[hit1,hit2]){
            select[i,ii] <- TRUE;
        }
    }
}

此代码返回错误:

Error in if (gi[i, ii] >= qmat[hit1, hit2]) { : 
  argument is of length zero

我觉得问题是gi变量为hit1hit2返回值,有什么想法我可以解决它吗?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

失败的最可能原因是hit1hit2返回0

m <- matrix(1:12,4)
m[0,3] # integer(0)
if (m[0,3] > 0) 'foo!'
#Error in if (m[0, 3] > 0) "foo!" : argument is of length zero

...您可以使用tcrossprod(pm)代替pm%*%t(pm) - 它更快,(在我看来)更清晰。