我看起来很长很难以解决问题,但我找不到它。如果这是重复的话,我会提前道歉,如果你指示我回答,我会删除这个问题。
我有一个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
我不知道该怎么做。
谢谢!
答案 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
的包装器,可以为您进行简化。