假设我有一个R公式:
fm <- formula(y~x1+x2+x1:x2)
一系列新的回复结果,y1
,y2
,y3
。如何通过y
循环替换公式fm
中的for
?
for (newy in c(y1,y2,y3)){
newfm=formula(...)
}
答案 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
将公式作为公式处理无疑是有点棘手的 - 它实际上更容易将它们作为字符处理,然后使用reformulate
或as.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"))
}