R语言中能否在lapply提取列表元素时直接传入mean函数计算分组均值
你给出的写法lapply(myList, [[, 1, mean)不能实现相同需求,运行后只会返回每个分组的体重列,不会计算得到均值。
原因说明
lapply的语法规则是lapply(X, FUN, ...),...位置传入的所有参数都会直接传递给你指定的函数FUN:
你这里指定的FUN是取子集操作符[[,所以后续传入的1、mean都是给[[的参数,[[只会识别取第1列的要求,额外传入的mean不会生效,也不会触发均值计算,最终效果和lapply(myList, [[, 1)完全一致。
可行的一步实现写法
你可以用匿名函数的方式把取列和求均值的逻辑合并,直接在单次lapply中完成计算:
# 写法1:基础包匿名函数实现 a <- lapply(myList, function(df) mean(df[[1]]))
如果接受用第三方包,purrr的map语法更简洁:
# 写法2:purrr包实现 library(purrr) a <- map(myList, ~mean(.x[[1]]))
另外针对这个按Diet分组求体重均值的需求,其实不需要先拆分数据集再计算,直接用aggregate函数一步就能得到结果:
# 更高效的原生实现,直接输出分组+均值的结果框 weight_mean <- aggregate(weight ~ Diet, data = ChickWeight, FUN = mean)
内容的提问来源于stack exchange,提问作者Iftikhar
相关产品推荐
相关产品推荐

