我的代码:
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
循环中的迭代次数)。