向量列表的增量均值

时间:2017-11-08 18:06:25

标签: r vectorization

我有一个向量,我想采用向量的增量平均值。

a <- 2 4 6 2 4 0 1 0 0 1

这有效:

for(i in seq_along(a)) {
    print(mean(a[1:seq_along(a)[[i]]]))
    }
[1] 2
[1] 3
[1] 4
[1] 3.5
[1] 3.6
[1] 3
[1] 2.714286
[1] 2.375
[1] 2.111111
[1] 2

但是现在我想将它扩展到矢量列表并且我被卡住了。

b <- list(x = rnorm(10, mean = 5), x2 = rnorm(10, mean = 20))
b
$x
 [1] 4.893252 5.129610 4.599701 5.409024 4.666844 5.787243 5.697621 2.968771 5.216302 6.268629

$x2
 [1] 19.50947 22.14797 20.80683 19.47857 21.24126 18.36233 20.57424 19.68233 20.67508 19.83930

当我尝试这个时,我得到以下内容:

for(i in seq_along(b)) {
     print(mean(b[[i]][1:seq_along(b[[i]])[[i]]]))
}
[1] 4.893252
[1] 20.82872

它应返回两个向量,显示每个索引的均值,如前一个示例,而不是向量本身的总平均值

我不知道如何继续。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

而不是for循环,只需使用cumsum()除法来计算累积均值,你会更好。例如

cummean <- function(x) cumsum(x)/seq_along(x)

然后你可以做

cummean(a)

或列表

lapply(b, cummean)

答案 1 :(得分:0)

这项工作适合你?

set.seed(1)
b <- list(x = rnorm(10, mean = 5), x2 = rnorm(10, mean = 20))
lapply(b, function(x) cumsum(x) / seq_along(x))