迭代 R 中的公式元素

Iterate over formula elements in R

有没有办法在 R 中迭代公式? 我需要做的是假设我们有一个公式:as.formula(hp ~ factor(gear) + qsec + am)

我需要做的是遍历公式的元素所以我可以创建 3 个模型(3 个因为我们使用 3 个回归变量 - 没有计算假人)

我需要创建第一个模型 as.formula(hp ~ factor(gear)),然后是 as.formula(hp ~ factor(gear) + qsec),最后是 as.formula(hp ~ factor(gear) + qsec + am)

我们能否以某种方式在一次迭代中只使用一个回归器,然后使用两个,什么时候使用三个?

我需要将此功能自动化,"hand" 方法不好

我的方法是:使用 sprintfpaste(使用 collapse 选项)创建一个字符串,将其强制转换为公式,然后遍历要包含的元素.

elements <- c("factor(gear)", "qsec", "am")

for (i in 1:length(elements)) {
    fmla <- as.formula(sprintf("hp ~ %s", paste(elements[1:i], collapse = " + ")))
    print(fmla)
    print(summary(lm(fmla, data = mtcars)))
}

如果您需要解析给定的公式,您可以在 运行 上面的循环之前执行类似的操作(可能需要针对您的特定设置进行修改):

library(stringr)
input_fmla <- "as.formula(hp ~ factor(gear) + qsec + am)"
temp <- str_remove_all(input_fmla, "(as.formula\([^ ]* ~ |\)$)")
elements <- trimws(str_split(temp, pattern = "\+")[[1]])