"Claus Dethlefsen" <[EMAIL PROTECTED]> writes: > 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?
Eek, no!! > Is there an > easy way of doing this? Not really. Recursively descend the parse tree and replace calls to tvar with its argument. Probably ends with one of those 10-line functions that take hours to get right... Something like this would go in the middle if (is.call(e)) if (e[[1]]==as.name("tvar")) e[[2]] else for (i in 2:length(e)) e[[i]] <- myfun(e[[i]]) else e If you don't mind getting left with a couple of extra parentheses, this seems to work: > eval(substitute(substitute(fm1,list(tvar=as.name("("))),list(fm1=fm1))) Y ~ 1 + (x:A) + (z) + u + (B) + (poly(v, 3)) (Note to self: we need a substitute() variant that takes a variable, not a literal as the first argument.) -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: (+45) 35327907 ______________________________________________ [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