R语言mutate()报错:Index 1长度应为1而非13的解决咨询
问题修正方案
错误原因
你的代码错误在于map(data, allstn_models)的用法:map的第二个参数需要是处理单个子数据集的函数,但你传入的是一个包含13个模型的列表。当map尝试对第一个站点的子tibble调用allstn_models时,R会把列表当作函数来解析,导致索引长度不匹配的报错。
两种修正方法
方法1:直接绑定已生成的模型列表
如果allstn_models的顺序和by_stn中站点的顺序完全一致,直接将列表赋值给model列即可,无需使用map:
by_stn <- by_stn %>% mutate(model = allstn_models)
方法2:用map动态生成模型(符合R4DS多模型思路)
定义一个针对单个站点数据集的建模函数,再用map遍历每个子数据集生成模型:
# 定义单个站点的建模函数,替换成你的实际回归公式 single_stn_model <- function(data) { lm(响应变量 ~ 自变量, data = data) } # 遍历每个站点的子数据集生成模型 by_stn <- by_stn %>% mutate(model = map(data, single_stn_model))
后续绘图示例
修正后,你可以结合map和ggplot2批量生成残差vs拟合值图:
by_stn <- by_stn %>% mutate(resid_plot = map(model, function(mod) { tibble( fitted = fitted(mod), resid = residuals(mod) ) %>% ggplot(aes(x = fitted, y = resid)) + geom_point() + geom_hline(yintercept = 0, linetype = "dashed") + labs(x = "拟合值", y = "残差") })) # 查看第一个站点的残差图 by_stn$resid_plot[[1]]
内容的提问来源于stack exchange,提问作者user26500248
相关产品推荐
相关产品推荐

