R,列表的向量子集之间的操作

时间:2015-12-21 15:12:12

标签: r vector

我确信这已经被问到了,但经过长时间的搜索,我仍然坚持......

如何计算列表向量子集的元素均值?该列表如下:

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])}) 但这只返回向量的元素,而不是列表的向量。

非常感谢任何建议

2 个答案:

答案 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)完成了这项工作。