You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:47:38