Je suis nouveau dans R. Je veux remplir une matrice vide avec les résultats de ma boucle for
en utilisant cbind
. Ma question est la suivante: comment puis-je éliminer les AN dans la première colonne de ma matrice? J'inclus mon code ci-dessous:
output<-matrix(,15,) ##generate an empty matrix with 15 rows, the first column already filled with NAs, is there any way to leave the first column empty?
for(`enter code here`){
normF<-`enter code here`
output<-cbind(output,normF)
}
La sortie est la matrice que j'attendais. Le seul problème est que sa première colonne est remplie de NA. Comment puis-je supprimer ces NA?
La valeur par défaut pour matrix
est d’avoir 1 colonne. Pour avoir explicitement 0 colonnes, vous devez écrire
matrix(, nrow = 15, ncol = 0)
Un meilleur moyen serait de préallouer la matrice entière puis de la remplir.
mat <- matrix(, nrow = 15, ncol = n.columns)
for(column in 1:n.columns){
mat[, column] <- vector
}
Si vous ne connaissez pas le nombre de colonnes à l'avance, ajoutez chaque colonne à une liste et cbind
à la fin.
List <- list()
for(i in 1:n)
{
normF <- #something
List[[i]] <- normF
}
Matrix = do.call(cbind, List)
Je serais prudent car rejeter quelque chose comme une mauvaise idée parce que c'est lent. S'il s'agit d'une partie du code dont l'exécution ne prend pas beaucoup de temps, la lenteur n'a pas d'importance. Je viens d'utiliser le code suivant:
for (ic in 1:(dim(centroid)[2]))
{
cluster[[ic]]=matrix(,nrow=2,ncol=0)
}
# code to identify cluster=pindex[ip] to which to add the point
if(pdist[ip]>-1)
{
cluster[[pindex[ip]]]=cbind(cluster[[pindex[ip]]],points[,ip])
}
pour un problème qui a fonctionné en moins de 1 seconde.
Pour supprimer la première colonne de NA, vous pouvez le faire avec une indexation négative (qui supprime les index du jeu de données R). Par exemple:
output = matrix(1:6, 2, 3) # gives you a 2 x 3 matrix filled with the numbers 1 to 6
# output =
# [,1] [,2] [,3]
# [1,] 1 3 5
# [2,] 2 4 6
output = output[,-1] # this removes column 1 for all rows
# output =
# [,1] [,2]
# [1,] 3 5
# [2,] 4 6
Vous pouvez donc simplement ajouter output = output[,-1]
after à la boucle for dans votre code d'origine.