R语言使用lapply配合aov()无p值F值仅返回Class、Mode的问题咨询
问题原因
你遇到的现象和lapply适配性无关,问题出在两处:
- 你直接对aov对象构成的列表执行
summary(),R默认会输出列表本身的结构信息,不会自动遍历列表内的每个aov对象执行对应统计汇总方法。而你之前用kruskal.test时大概率是在批量生成结果后直接提取了属性值,没有对整个列表跑summary才没暴露这个问题。 - 你写的第三个自定义函数
tree有语法错误,调用aov时没有传入data参数,模型无法定位Height和Person变量。
正确实现代码
基础R写法
# 批量生成每个数据框的aov模型 mut <- lapply(df_list, function(x) aov(Height ~ Person, data = x)) # 对每个aov模型单独执行summary mut_summary <- lapply(mut, summary) # 输出所有结果 mut_summary # 如需批量提取p值可以用下面的代码 lapply(mut_summary, function(res) res[[1]][["Pr(>F)"]][1])
purrr写法
library(purrr) # 批量生成模型+汇总 cow_summary <- map(df_list, ~ aov(Height ~ Person, data = .x)) %>% map(summary) # 查看结果 cow_summary
补充说明
你提供的示例数据中,每个Person对应的Height是完全重复的,组内方差为0,跑出来的p值会极小,换成你的真实业务数据即可得到正常的统计结果。
内容的提问来源于stack exchange,提问作者Tyler Ruddenfort
相关产品推荐
相关产品推荐

