L'Argument de longueur nulle dans R, après, si la fonction
Je suis un argument de longueur zéro après l'exécution du code ci-dessous. J'ai regardé les autres utilisateurs à cette question, mais je suis incapable de comprendre l'erreur.
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;
}
}
}
Ce code renvoie l'erreur:
Error in if (gi[i, ii] >= qmat[hit1, hit2]) { :
argument is of length zero
J'ai le sentiment que le problème est le gi
variable comme hit1
et hit2
valeurs de retour, les idées de comment je pourrais résoudre ce problème? Toute aide serait grandement appréciée.
- Qu'est-ce exactement qmat?
- Qmat est la suivante: qmat [,1] [,2] [1,] 1 1 [2,] 1 2 '
- Ne
p.sum
contiennent des indices? En général, nous ne pouvons pas tester ton code, parce que nous n'avons paspm
,llim
,p.sum
, ouqmat
. table(pm) pm 0 1 9909 91
,llim <- 0
,p.sum <- apply(pm,1,sum)
dim(pm)
donne [1] 5000 2- Vous devriez vraiment ajouter ces détails à la question de savoir si les gens n'ont pas à aller chercher dans les commentaires, dans une tentative pour vous aider.
Vous devez vous connecter pour publier un commentaire.
La raison la plus probable de l'échec est que
hit1
ouhit2
retourne0
....Et vous pouvez utiliser
tcrossprod(pm)
au lieu depm%*%t(pm)
- c'est plus rapide et (à mon avis) plus clair.hit1
retourne, 8136159 0 ethit2
retourne 7948894 0tcrossprod
ci-dessus.