Pregunta

Suppose I have an R formula such that:

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

And a set of new response outcomes, y1, y2, y3. How could I replace the y in the formula fm through a for loop?

for (newy in c(y1,y2,y3)){
    newfm=formula(...)
}
¿Fue útil?

Solución

How about:

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

Handling formulas as formulas is admittedly a little tricky -- it's actually easier to handle them as characters and then use reformulate or as.formula.

It would be interesting but considerably trickier to do this in the way suggested by the OP, using symbols rather than characters in the for loop -- i.e. for (newy in c(y1,y2,y3)) because the symbols would somehow have to be intercepted before R tried to evaluate them (and threw an error). I can't see how to make any construction of the form

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

work, because R will try to evaluate c(y1,y2,y3) before it enters the for loop ...

Otros consejos

Or try this:

for (i in 1:3) {
    as.formula(paste0("y",i,"~x1+x2+x1:x2"))
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top