我确信这已经被问到了,但经过长时间的搜索,我仍然坚持......
如何计算列表向量子集的元素均值?该列表如下:
str(hold_day)
List of 365
$ : num [1:65341] NA NA NA NA NA NA NA NA NA NA ...
$ : num [1:65341] NA NA NA NA NA NA NA NA NA NA ...
$ : num [1:65341] NA NA NA NA NA NA NA NA NA NA ...
$ : num [1:65341] NA NA NA NA NA NA NA NA NA NA ...
$ : num [1:65341] NA NA NA NA NA NA NA NA NA NA ...
$ : num [1:65341] NA NA NA NA NA NA NA NA NA NA ...
$ : num [1:65341] NA NA NA NA NA NA NA NA NA NA ...
我需要从列表的[[n]]到[[n + 10]]向量计算元素方面的平均值(而不是每个向量的元素的平均值)。例如:
hold_mean =(hold_d [[n]] + hold_d [[n + 1]] + ... + hold [[n + 10]])/ 11
如何在循环中递归计算hold_mean?
我试过sapply(hold_d, function(x){mean(x[c(n:n+10), na.rm=T])})
但这只返回向量的元素,而不是列表的向量。
非常感谢任何建议
答案 0 :(得分:1)
你可以使用Hadley的purrr包和zip_n函数(这真是太棒了)
library(purrr)
datas <- lapply(1:5, function(x) rep(x,10))
datas %>% zip_n(.simplify = TRUE) %>% lapply(mean)
基本上,zip_n将列表翻出来,在这种情况下,将所有相关元素放在它们自己的列表元素中,而不是作为不同列表元素的一部分。之后我们可以计算出相应的方法,如果你想计算前10个元素,你现在可以翻看压缩列表的前10个元素:
lapply((datas %>% zip_n(.simplify = TRUE))[1:10], mean)
答案 1 :(得分:0)
感谢你的回复,他们都没有真正解决。
我求助于使用张量(向量矩阵)而不是列表。
在张量上,简单colMeans(hold_d[k:(k+md-1),], na.rm=T)
完成了这项工作。