如何替换公式中的因变量?

时间:2014-04-02 18:48:39

标签: string r formula

假设我有一个R公式:

fm <- formula(y~x1+x2+x1:x2)

一系列新的回复结果,y1y2y3。如何通过y循环替换公式fm中的for

for (newy in c(y1,y2,y3)){
    newfm=formula(...)
}

2 个答案:

答案 0 :(得分:7)

怎么样:

fm <- formula(y~x1+x2+x1:x2)
for (newy in c("y1","y2","y3")){
    newfm <- reformulate(deparse(fm[[3]]),response=newy)
    print(newfm)
}
## y1 ~ x1 + x2 + x1:x2
## y2 ~ x1 + x2 + x1:x2
## y3 ~ x1 + x2 + x1:x2

将公式作为公式处理无疑是有点棘手的 - 它实际上更容易将它们作为字符处理,然后使用reformulateas.formula

以OP建议的方式执行此操作会很有趣但是相当棘手,使用符号而不是for循环中的字符 - 即for (newy in c(y1,y2,y3))因为符号必须以某种方式在R试图评估它们之前截获(并抛出错误)。我无法看到如何构建表单

for (newy in c(y1,y2,y3)) {
    ...
}

工作,因为R会在进入for循环之前尝试评估c(y1,y2,y3) ...

答案 1 :(得分:1)

或试试这个:

for (i in 1:3) {
    as.formula(paste0("y",i,"~x1+x2+x1:x2"))
}