在R中的列表中添加元素的最快方法
在列表中执行元素添加的最佳方式是什么,即:在R中的列表中添加元素的最快方法,r,list,R,List,在列表中执行元素添加的最佳方式是什么,即: sum=c(1+1+1,2+2+2,3+3+3)=c(3,6,9) 我尝试了Reduce(“+”,zii)但速度很慢。还有其他建议吗?我不确定这是否会更快。data.frame执行大量有效性检查: zii=list() zii[[1]]=c(1,2,3) zii[[2]]=c(1,2,3) zii[[3]]=c(1,2,3) 如果你有时间使用microbenchmark,也可以试试这些。我猜其中一个会赢,我的钱会花在第二个上 > rowSums
sum=c(1+1+1,2+2+2,3+3+3)=c(3,6,9)
我尝试了
Reduce(“+”,zii)
但速度很慢。还有其他建议吗?我不确定这是否会更快。data.frame
执行大量有效性检查:
zii=list()
zii[[1]]=c(1,2,3)
zii[[2]]=c(1,2,3)
zii[[3]]=c(1,2,3)
如果你有时间使用microbenchmark,也可以试试这些。我猜其中一个会赢,我的钱会花在第二个上
> rowSums(data.frame(zii))
[1] 3 6 9
看来我赌输了:
> rowSums(do.call(cbind, zii))
[1] 3 6 9
> colSums(do.call(rbind, zii))
[1] 3 6 9
想要的答案是
c(3,6,9)
或18
?@mtoto sum unlist给出完整的总和,我需要元素的总和,因为结果是c(3,6,9)@A.Webb想要的答案是c(3,6,9)。如果数据是这样组织的,我怀疑你的Reduce
会是赢家。维度是什么?如果所有元素的长度和类型都相同,那么矩阵是更好的数据结构,其中定义了colSums
colSums(矩阵(unlist(zii),nrow=length(zii,byrow=TRUE))
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