r语言 - 在循环中使用公式(粘贴(...)):"Using formula(x) is deprecated when x is a character vector of length >



我的代码:

for (x in dataset$year){
controls_c <- paste(controls, collapse = "+")
spec <- formula(paste(dataset$Inflation,
"~MonetaryPolicyShockRomer&Romer+",
controls_c))
regs_controls[[x]] <- lm(spec, data = dataset %>% filter(x))
}

我遇到以下错误:

当 x 是长度为 1>字符向量时,不推荐使用 formula(x)。 考虑公式(粘贴(x,折叠=" "))。

如何解决问题?

推测:

controls_c <- c("somefield", "anotherfield", ...)
regs_controls <- list()
controls_c <- paste(controls, collapse = "+")
for (x in unique(dataset$year)) {
spec <- formula(paste("Inflation", "~",
paste(c("`MonetaryPolicyShockRomer&Romer`", controls_c),
collapse = " + ")))
regs_controls[[as.character(x)]] <- lm(spec, data = dataset %>% filter(year == x))
}

对代码的更改:

  • 我已经将您的单列"MonetaryPolicyShockRomer&Romer"controls_c一起组合成一个向量,以便我们可以将它们一起折叠到公式的单个 RHS 中;
  • 将该"Monetary..."用反引号括起来,因为&不是对象名称(即列名)中的"合法"字符。可以使用,您只需用反引号括起来即可使用它,就像您可以完全由数字(或以数字开头)的列名一样
  • 更改了循环,以便每个找到的唯一year仅循环一次
  • 更改了列表中year的存储为字符串而不是数字; 例如,执行regs_controls[[2021]] <- ...将尝试将lm(..)的结果存储在列表中的第 2021 位,这不一定是您想要的(我推断)。相反,将使用regs_controls[["2021"]],它将进入第一个可用位置(取决于今年之前for循环中的迭代次数)。

相关内容

  • 没有找到相关文章

最新更新