4

我有十个巨大的列表(每个列表有七个元素,但元素很大),我需要计算这些列表的元素明智平均值。因此,如果有 A1、A2、A3、...、A10 列表。我需要计算:

mean1 = mean(A1[[1]], A2[[1]], A3[[1]], ...,A10[[1]])
.
.
.
mean7 = mean(A1[[7]], A2[[7]], A3[[7]], ....A10[[7]])

我已经用for循环完成了,但我想知道R是否提供了更好的解决方案。提前谢谢你。

4

2 回答 2

7

如果您A[[·]]是以下列表中的向量,

> ( List <- list(A=1:4, B=5:8, C=9:12) )
$A
[1] 1 2 3 4

$B
[1] 5 6 7 8

$C
[1]  9 10 11 12

那么您可以使用这种方法来获得平均值:

> rowMeans(simplify2array(List))
[1] 5 6 7 8

rowMeans(as.data.frame(List))会给你同样的结果。

于 2013-07-23T16:26:04.290 回答
3

假设您A的 s 是向量列表:

Anames <- paste0("A", 1:10)

# for completeness
for(A in Anames)
    assign(A, lapply(1:7, function(x) rnorm(1000)))

sapply(1:7, function(i)
{
    m <- sapply(Anames, function(A) get(A)[[i]])
    mean(m)
})

这避免了在内存中构建所有As 的副本,而是一次检索它们并提取所需的向量。但是,如果您有足够的内存来存储所有这些数据,那么您也可以负担得起存储一份副本。

于 2013-07-23T16:39:27.143 回答