我有一个向量,我想采用向量的增量平均值。
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
它应返回两个向量,显示每个索引的均值,如前一个示例,而不是向量本身的总平均值
我不知道如何继续。在此先感谢您的帮助。
答案 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))