运行下面的代码后,我得到一个长度为零的参数。我已经查看过这个问题的其他用户,但是我无法弄清楚错误。
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
变量为hit1
和hit2
返回值,有什么想法我可以解决它吗?非常感谢任何帮助。
答案 0 :(得分:3)
失败的最可能原因是hit1
或hit2
返回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)
- 它更快,(在我看来)更清晰。