zii=list()
zii[[1]]=c(1,2,3)
zii[[2]]=c(1,2,3)
zii[[3]]=c(1,2,3)
在列表中执行元素逐个加法的最佳方法是什么,即IE:sum=c(1+1+1,2+2+2,3+3+3)=c(3,6,9)
我尝试过Reduce("+",zii)
,它很慢。还有其他建议吗?
我不确定是否会更快。在data.frame
做了很多有效性检查:
> rowSums(data.frame(zii))
[1] 3 6 9
如果您转而使用microbenchmark,也可以尝试这些方法。我猜测其中之一将获胜,而我的钱将用于第二个。:
> rowSums(do.call(cbind, zii))
[1] 3 6 9
> colSums(do.call(rbind, zii))
[1] 3 6 9
看起来我输了赌注:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句