R 使用mapply计算多个列表的平均值
数据集R 使用mapply计算多个列表的平均值,r,mean,lapply,mapply,R,Mean,Lapply,Mapply,数据集 firstList <- list(a = 1:3, b = 4:6) secondList <- list(c = 7:9, d = 10:12) 它不起作用,因为mean仅根据 这是正确的: mapply(mean, firstList) mapply(mean, secondList) 然后,我尝试lappy一次提供一个列表给mappy lapply(c(firstList, secondList), function(x) mapply(mean, x))
firstList <- list(a = 1:3, b = 4:6)
secondList <- list(c = 7:9, d = 10:12)
它不起作用,因为mean
仅根据
这是正确的:
mapply(mean, firstList)
mapply(mean, secondList)
然后,我尝试lappy
一次提供一个列表给mappy
lapply(c(firstList, secondList), function(x) mapply(mean, x))
输出不是平均值,而是单个列表
我需要的是如何使用mapply
计算多个列表的平均值。我还希望解释一下为什么mapply
没有返回“平均值”列表
事先非常感谢根据的意思
,用法是
mean(x, ...)
在mapply
中,我们有'x'和'y',因此我们可以将相应的列表
元素串联成单个'x',然后取平均值
mapply(function(x,y) mean(c(x,y)), firstList, secondList)
#a b
#5 8
sapply(Map(c, firstList, secondList), mean)
# a b
#5 8
同
mean(c(1:3, 7:9))
#[1] 5
如果我们使用的是apply
函数的组合,我们可以使用Map
连接,然后使用sapply
循环列表
元素,以获得平均值
mapply(function(x,y) mean(c(x,y)), firstList, secondList)
#a b
#5 8
sapply(Map(c, firstList, secondList), mean)
# a b
#5 8
或者,如果列表
元素的长度
相同,我们可以使用colMeans
,因为mapply/c
输出是一个矩阵
,没有SIMPLIFY=FALSE
colMeans(mapply(c, firstList, secondList))
#a b
#5 8
非常感谢,您是说函数的参数数必须等于要平均的列表数,对吗?@ragysaac它与mean
中的参数有关,它只能取x
,其中与mappy/Map
一样,您有x,y,。。。取决于列表的数量。此外,如果有许多列表,而不是指定函数(x,y,z,u)
,您可以使用c
连接所有相应的列表元素,然后使用sapply
获得平均值,或者如果长度相同,则使用colMeans
。@ragysaac另一个选项是库(data.table);rbindlist(list(firstList,secondList))[,lapply(.SD,mean)]
@ragysaac如果您查看c(firstList,secondList)
的输出,它是一个长度为4的列表lappy
将循环遍历列表元素。每个列表元素都是一个向量。在该向量上应用mapply
,就像再次循环每个向量元素,而执行mean
只是执行单个值的mean
。@ragysaac如果要在串联后获得每个列表元素的平均值,lappy(c(firstList,secondList),function(x)mappy(mean,list(x)))
或只是lappy(c(第一个列表,第二个列表),平均值)