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

循环中使用formula(paste(…))报错:字符向量长度>1时formula(x)已弃用

问题解决步骤

错误根源

  • 公式构建时误用列数据而非列名:dataset$Inflation是整个Inflation列的数值向量,不是变量名,经paste拼接后会生成包含所有Inflation值的长字符向量,传给formula()时触发弃用警告。
  • 数据筛选逻辑错误:filter(x)未指定目标列,R会将年份值x当作逻辑向量处理,无法正确筛选对应年份的数据。

修正后的代码

# 提前拼接控制变量,避免循环内重复计算
controls_c <- paste(controls, collapse = "+")

# 按唯一年份循环拟合模型
for (x in unique(dataset$year)) {
  # 用变量名构建公式,而非列数据
  spec <- formula(paste("Inflation ~ MonetaryPolicyShockRomer&Romer +", controls_c))
  # 正确筛选对应年份的数据
  regs_controls[[as.character(x)]] <- lm(spec, data = dataset %>% filter(year == x))
}

额外优化说明

  • 用unique(dataset$year)循环:若数据集中存在重复年份,避免重复拟合相同模型,提升运行效率。
  • 将年份转为字符型作为列表索引:若年份为数值型,字符索引可避免因数值索引规则导致的列表元素混乱。

内容的提问来源于stack exchange,提问作者user19562955

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:40:57