Meilleure façon d'allouer de la matrice R, NULL vs NA?
Je suis en train d'écrire R code pour créer une matrice carrée. Donc, mon approche est la suivante:
- Allouer une matrice de taille correcte
- Boucle sur chaque élément de ma matrice et le remplir avec une valeur appropriée
Ma question est simple: quel est le meilleur moyen de pré-allouer de cette matrice? Jusqu'à présent, j'ai deux façons:
> x <- matrix(data=NA,nrow=3,ncol=3)
> x
[,1] [,2] [,3]
[1,] NA NA NA
[2,] NA NA NA
[3,] NA NA NA
ou
> x <- list()
> length(x) <- 3^2
> dim(x) <- c(3,3)
> x
[,1] [,2] [,3]
[1,] NULL NULL NULL
[2,] NULL NULL NULL
[3,] NULL NULL NULL
Aussi loin que je peux voir, le premier est plus concis que le dernier. Aussi, l'ancien remplit la matrice avec NAs, tandis que le second est rempli avec des valeurs Null.
Qui est la "meilleure" façon de le faire? Dans ce cas, je suis à la définition de "mieux" en tant que "meilleure performance", parce que c'est l'informatique statistique et de cette opération aura lieu avec de grands ensembles de données.
Alors que le premier est plus concis, il n'est pas à couper le souffle plus facile à comprendre, donc j'ai l'impression que cela pourrait aller de toute façon.
Aussi, quelle est la différence entre NA et NULLE dans R? ?Et NA ?NULL me dire que "NA" a une longueur égale à "1" alors que la valeur NULL a une longueur égale à "0" - mais est-il plus là? Ou de meilleures pratiques? Cela va affecter la méthode que j'utilise pour créer mes matrice.
- Pas demandé, pourquoi voulez-vous faire une boucle sur les éléments de la matrice? Est-il possible que vous pouvez utiliser un vectorisé opération à la place? Que devrait être votre prochaine question ici! 🙂
- c'est en gros ce que je veux en venir à cette question ici: stackoverflow.com/questions/1719447/.... Si vous avez des suggestions, je serais ravi de l'entendre!
Vous devez vous connecter pour publier un commentaire.
En cas de doute, testez vous-même. La première approche est à la fois plus facile et plus rapide.
Ce qui concerne la différence entre NA et NULS:
Il y a en fait quatre constantes.
Vous pouvez en lire plus dans la R manuel sur la définition de langage.
matrix
restera comme il est.Selon cet article nous pouvons faire mieux que preallocating avec
NA
par preallocating avecNA_real_
. De l'article:Recommandée: nous allons le tester.
Et pour les entiers:
La différence est faible dans mon cas de test, mais il est là.
3
est de classenumeric
vous signifiait probablement 3L. Néanmoins, je ne vois pas les performances mesurables de l'impact de l'utilisation de NA (même si la mesure pour 20 s chacun et faire en sorte gc fait son travail)