Аргумент нулевой длины в R после функции if - PullRequest
1 голос
/ 22 марта 2012

Я получаю аргумент нулевой длины после запуска приведенного ниже кода. Я смотрел на других пользователей с этой проблемой, однако я не могу выяснить ошибку.

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, есть идеи, как мне это исправить? Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 22 марта 2012

Наиболее вероятной причиной сбоя является то, что 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) - это быстрее и (на мой взгляд) понятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...