web-dev-qa-db-fra.com

R le nombre d'éléments à remplacer n'est pas un multiple de la longueur/des résultats de remplacement, mais correct

Je sais qu'il y a déjà eu des discussions à ce sujet, mais je ne suis pas parvenu à comprendre quel pourrait en être le problème - veuillez me pardonner pour cela ..

J'essaye de lancer le code

  for (i in 1:a){
    matrix$new_column[i]<-which(matrix[i,1:b-1]==matrix$col_b[i])
  }

Ce que je tente, c’est: Pour la matrice de a lignes et b colonnes, dans les colonnes de chaque ligne 2 à b-1 , trouvez celui qui contient la même valeur que celui de la colonne b (il y a toujours une telle valeur) et écrivez le numéro de la colonne correspondante dans * new_column *

Mon code continue à jeter l'erreur 

Avertissement dans la matrice $ new_column [i] <- qui (matrice [i,: nombre d'éléments À remplacer n'est pas un multiple de la longueur de remplacement

Cependant, le résultat est complètement correct. j'ai essayé 

  • créer la * new_column * remplie avec les 0 en premier
  • changer les indices finaux de a à a-1 ou a + 1

Comme je l'ai dit, le résultat est correct, mais j'estime que je ne devrais pas recevoir le message d'avertissement si j'ai tout fait correctement, alors je suis vraiment reconnaissant de tout conseil sur la façon de résoudre ce problème. 

Enfin, ne me demandez pas pourquoi j’ai choisi 1: b-1 quand je voulais passer de 2 à b-1, j’ai vu que lorsque j’utiliserais 2: b-1, cela commencerait en réalité dans la colonne 3 ..

8
tfp

which() peut renvoyer un vecteur s'il y a plusieurs correspondances. Par exemple:

which((1:12)%%2 == 0) # which are even?

matrix$col_b[i] est-il unique? Les résultats peuvent quand même paraître corrects. Remarquez ce qui se passe dans ce cas:

x <- 1:2
x[1] <- 3:4
x

De plus, 1:b-1 ne vous communique pas les chiffres de 1 à b - 1, mais ceux de 1 à b, tous les moins 1:

b <- 10
1:b-1

Vous avez besoin de parenthèses pour forcer la soustraction en premier: 1:(b - 1).

6
Christopher Louden

ou essayez ceci si vous voulez créer cinq vecteurs de Y.

set.seed(101)
    lambda_j <- rgamma(1000,1,1)

    Y <- matrix(NA, nrow=1000, ncol=5)
for (j in 1:ncol(Y)) {
  for(i in 1:nrow(Y)) {
    Y[,j] <- rpois(1000,lambda_j)
  }
}
0
Little Bee