On Thu, 16 Dec 2004, Claus Dethlefsen wrote:

Thank you for the advice. I have now boiled my problem down to the
following:

How do I create fm2 from fm1 ?

fm1 <-  Y ~ 1 + tvar(x:A) + tvar(z) + u + tvar(B) + tvar(poly(v,3))
fm2 <-  Y ~ 1 + x:A + z + u + B + poly(v, 3)

Thus, how do I simply remove tvar( * ) from a formula? Do I have to write a
function to parse the string and then re-create the formula? Is there an
easy way of doing this?

One way is to process the formula recursively:

no.tvar<-function(formula){
process<-function(expr){
if (length(expr)==1)
return(expr)
if(length(expr)==2)
if ( expr[[1]]==as.name("tvar"))
return(expr[[2]])
else return(expr)
expr[[2]]<-process(expr[[2]])
expr[[3]]<-process(expr[[3]])
return(expr)
}
formula[[3]]<-process(formula[[3]])
formula }


no.tvar(fm1)
Y ~ 1 + x:A + z + u + B + poly(v, 3)

This is not the more common sort of problem where you actually want to remove terms from a formula (eg Error() in aov, cluster() and strata() in coxph). You want to modify them in place.


-thomas

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to