对R中列表中收集的向量的函数

时间:2013-08-20 11:47:41

标签: r list plyr

我看起来很长很难以解决问题,但我找不到它。如果这是重复的话,我会提前道歉,如果你指示我回答,我会删除这个问题。

我有一个list(Mylist),其中每个元素都包含许多不同的字段。我对名为'coefficients'的数字向量感兴趣。因此,我可以选择与列表的i'th实例相关的系数

Mylist[[i]]$coefficients

但如何获得所有coefficients的{​​{1}}的平均值?平均值只是一个例子。我通常感兴趣的是如何在列表中计算函数,其中列表的每个字段包含多个i / data.frame / matrix等。

更新:正如下面托马斯亲切提供的,这里有一些关于这个问题的假数据:

string

我试过看Mylist <- replicate(10,data.frame(coefficients=rnorm(20), something=rnorm(20)), simplify=FALSE) ,但由于'Mylist'还有其他字段而不是lapply我不知道该怎么做。

谢谢!

2 个答案:

答案 0 :(得分:3)

如果你想要所有列表中所有系数的均值,请尝试...

mean( unlist( sapply( Mylists , function(x) `[`(x , 'coefficients') ) ) )

但是,你应该澄清你想要什么,因为不清楚你是否想......

# A mean for each set of coefficients
sapply( Mylists , function(x) mean( x$coefficients ) )

# The mean for each coefficient across all lists
rowMeans( sapply( Mylists , function(x) x$coefficients ) )

答案 1 :(得分:3)

您可能需要提供有关数据确切结构的更多详细信息,但这只是一个简单的示例:

# some fake data:
mylist <- replicate(10,data.frame(coefficients=rnorm(20),
                                  something=rnorm(20)), simplify=FALSE)
# take the grand mean:
mean(sapply(mylist,function(x) x$coefficients))

但也许你想要所有列表条目中每组相应系数的均值,你可以得到以下任何一种(相同的):

colMeans(do.call(rbind,lapply(mylist,function(x) x$coefficients)))
rowMeans(do.call(cbind,lapply(mylist,function(x) x$coefficients)))

@ SimonO101正确地指出简化为:

rowMeans(sapply(mylist, function(x) x$coefficients))

因为sapply只是lapply的包装器,可以为您进行简化。