Ligne-sage de la variance d'une matrice dans la R
Je voudrais calculer la variance pour chaque ligne dans une matrice. Pour la matrice suivante A
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 5 6 10
[3,] 50 7 11
[4,] 4 8 12
Je voudrais obtenir
[1] 16.0000 7.0000 564.3333 16.0000
Je sais que je peux y arriver avec apply(A,1,var)
, mais est-il plus rapide ou plus efficace? D'octave, je peux le faire avec var(A,0,2)
, mais je ne comprends pas comment le Y
argument de la var()
fonction dans R est utilisé.
Edit: Le dataset d'un typique contient environ 100 lignes et 500 colonnes. La quantité totale de données est d'environ 50 GO.
Connexes: stackoverflow.com/questions/17549762/is-there-such-colsd-in-r
Pourriez-vous s'il vous plaît laissez-nous savoir la dimension de votre ensemble de données?
Pourriez-vous s'il vous plaît laissez-nous savoir la dimension de votre ensemble de données?
OriginalL'auteur Toby | 2014-08-02
Vous devez vous connecter pour publier un commentaire.
Vous pourriez potentiellement vectoriser
var
sur des lignes (ou des colonnes) à l'aide derowSums
etrowMeans
À l'aide de @Richards données, les rendements en
Vous pouvez également créer un cadre plus général de la fonction qui va recevoir une syntaxe similaire à
apply
mais restera vectorisé (la colonne sage variance sera plus lente que la matrice doit être transposée en premier)que faire si vous voulez l'appliquer uniquement à un sous-ensemble de colonnes?
donc sous-ensemble au sein de la matrice, par exemple,
RowVar(A[, 1:3)
sera exécuté uniquement sur les 3 premières colonnes. Aussi, jetez un oeil à lamatrixStats
paquet, ils ont couvert à peu près tout. Vous pouvez également télécharger ces fonctions directement à partir de la GH, voir iciIncroyable. J'ai pu me couper de moitié le temps. Merci beaucoup!
OriginalL'auteur David Arenburg
C'est l'une des principales raisons pour lesquelles
apply()
est utile. Il est destiné à fonctionner sur les marges d'un tableau ou d'une matrice.Est de 300 millisecondes trop de temps pour faire de 10 000 calculs?
OriginalL'auteur Rich Scriven