R中用自定义函数对数据框多子集拟合线性回归报错如何解决?
报错原因与修正方案
两个报错的核心问题
- 第一个报错:自定义函数形参为
x,但lm函数的data参数用了函数内部不存在的.占位符,同时数据集菌落数列名为CFU_mean,你写成了CFU,变量名不匹配。 - 第二个报错:
do()要求函数返回值为数据框格式,你之前直接返回coef()生成的数值向量,类型不符合要求。
可直接运行的实现代码
# 自定义回归函数,返回数据框格式的结果 regressions <- function(x) { # 拟合线性模型 model <- lm(CFU_mean ~ minutes, data = x) # 提取回归系数 coeff <- coef(model) # 提取p值:summary返回的系数表第四列为p值 p_value <- summary(model)$coefficients[,4] # 构造符合要求的输出数据框 data.frame( intercept = coeff[["(Intercept)"]], minutes_coef = coeff[["minutes"]], intercept_p = p_value[["(Intercept)"]], minutes_p = p_value[["minutes"]] ) } # 分组计算回归结果 lm_abx_by_MIC <- rawdata2 %>% group_by(antibiotic, MIC) %>% # 提前过滤低于检测下限的观测 filter(CFU_mean > 50) %>% # 使用group_modify分组运行自定义函数,语法比do更简洁 group_modify(~regressions(.x))
输出说明
运行完成后lm_abx_by_MIC会自动保留分组列antibiotic、MIC,同时包含截距、时间的回归系数、对应p值,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者EJuskewitz
相关产品推荐
相关产品推荐

