Hi, I am trying to write a function which takes a formula as input and outputs a new formula with a different response while keeping the rest of the formula the same. I.e. respapply : ( y ~ a+b ) -> ( f(y) ~ a + b ) I have tried the following but it doesn't work. The terms become invalid as shown below. respapply <- function(fm, f) { fm[[2]] <- f(eval(fm[[2]])) fm; } > fm <- formula(y ~ a + b) > y <- runif(5) > newfm <- respapply(fm,identity) > newfm c(0.552921097259969, 0.939932722365484, 0.62522904924117, 0.899310540175065, 0.877736972644925) ~ a + b > terms(newfm) Error in terms.formula(fmapply(fm, identity)) : invalid term in model formula Could someone put me in the right direction of how to correctly write a respapply function as described. Regards, Paul Emberson
email at calidasoft.co.uk
2008-Jul-30 10:22 UTC
[R] function to transform response of a formula
Its ok. I've just read about update.formula in another message. Paul Paul Emberson wrote:> Hi, > > I am trying to write a function which takes a formula as input and > outputs a new formula with a different response while keeping the rest > of the formula the same. > > I.e. > > respapply : ( y ~ a+b ) -> ( f(y) ~ a + b ) > > I have tried the following but it doesn't work. The terms become > invalid as shown below. > > respapply <- function(fm, f) { > > fm[[2]] <- f(eval(fm[[2]])) > fm; > > } > > > fm <- formula(y ~ a + b) > > y <- runif(5) > > newfm <- respapply(fm,identity) > > newfm > > c(0.552921097259969, 0.939932722365484, 0.62522904924117, > 0.899310540175065, > 0.877736972644925) ~ a + b > > > terms(newfm) > Error in terms.formula(fmapply(fm, identity)) : > invalid term in model formula > > Could someone put me in the right direction of how to correctly write a > respapply function as described. > > Regards, > > Paul Emberson > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.