2016-03-25 4 views
2
zii=list() 
zii[[1]]=c(1,2,3) 
zii[[2]]=c(1,2,3) 
zii[[3]]=c(1,2,3) 

Quelle est la meilleure façon d'effectuer une addition élément par élément dans la liste, IE: sum=c(1+1+1,2+2+2,3+3+3)=c(3,6,9) j'ai essayé Reduce("+",zii) et il est lent. D'autres suggestions ?façon la plus rapide d'ajouter des éléments dans la liste en R

+0

La réponse souhaitée étant 'c (3,6 , 9) 'ou' 18'? –

+0

@mtoto somme unlist donne la sommation complète, j'ai besoin de sommation élémentaire comme dans les résultats est c (3,6,9) – raK1

+0

@ A.Webb La réponse désirée est c (3,6,9) – raK1

Répondre

4

Je ne sais pas si ce sera plus rapide. Le data.frame apporte énormément sur la vérification de validité:

> rowSums(data.frame(zii)) 
[1] 3 6 9 

pouvez essayer également si vous avez le temps d'en microbenchmark. Je devine que l'un de ces va gagner et mon argent serait sur le second .:

> rowSums(do.call(cbind, zii)) 
[1] 3 6 9 
> colSums(do.call(rbind, zii)) 
[1] 3 6 9 

On dirait que j'ai perdu mon pari:

require(microbenchmark) 
microbenchmark( Reduce("+",zii) , 
        rowSums(data.frame(zii)), 
        rowSums(do.call(cbind, zii)), 
        colSums(do.call(rbind, zii))) 
#------------------------------------------------------ 
Unit: microseconds 
         expr  min  lq  mean median  uq 
      Reduce("+", zii) 26.975 28.1870 31.02119 30.0560 30.9695 
    rowSums(data.frame(zii)) 730.933 744.9015 776.36775 753.5785 787.2765 
rowSums(do.call(cbind, zii)) 65.770 67.3800 71.94039 68.7050 70.1335 
colSums(do.call(rbind, zii)) 61.202 62.8830 66.21362 64.1060 65.9130 
     max neval cld 
    57.958 100 a 
1129.953 100 c 
    176.627 100 b 
    127.259 100 b