例如,如果我有一个数字向量。
c(1:9)
现在,如果我想以下列方式计算三个连续数字的总和:
(1+2+3,4+5+6,7+8+9)
我该怎么办?
答案 0 :(得分:1)
我学会了正确使用这个:
foo<-1:9
aggregate(foo,by=list(rep(1:3,each=3) ),FUN=sum)
要获得更长的输入,请执行以下操作:
function (x,len) aggregate(x,by=list(rep(1:(length(x)/len),each=len) ),FUN=sum)
因为我还在等what-if.xkcd.com更新,所以这里是时间: (我确实检查了所有计算正确的事情)
x<-1:99
len<-3
microbenchmark(shadow(x,len),rawr(x,len),groth(x,len),carl(x,len),times=10)
Unit: microseconds
expr min lq median uq max
shadow(x, len) 62.006 70.130 75.0480 97.926 180.884
rawr(x, len) 541.797 564.033 571.9445 585.842 639.295
groth(x, len) 514.002 525.548 547.5705 551.633 568.310
carl(x, len) 1045.536 1099.844 1120.5840 1166.553 1346.582
neval
10
10
10
10
所以matrix -- colSums
最快。我会把它留给其他人来弄清楚每种方法的内存要求。