On 15/11/2009 9:23 AM, Karsten Weinert wrote:
Hello,
at the Rgui command line I can easily remove a term from a fitted lm
object, like

fit <- lm(y~x1+x2+x3, data=myData)
update(fit, .~.-x1)

However, I would like to do this in a function with term given as string, like

removeTerm <- function(linModel, termName) { ??? }
removeTerm(fit, "x1")

but I can not fill the ???. I already tried

removeTerm <- function(linModel, termName) { update(linModel, .~. - termName },
removeTerm <- function(linModel, termName) { update(linModel, .~. -
as.name(termName) },
removeTerm <- function(linModel, termName) { update(linModel, .~. -
eval(termName) },
removeTerm <- function(linModel, termName) { update(linModel, .~. -
eval.parent(termName) },
removeTerm <- function(linModel, termName) { update(linModel, .~. -
get(termName) },

but these attempts produce error messages.

Can you advise me here?

There are two problems:

1. ".~." is different from ". ~ .".

2. You need to construct the formula ". ~ . - x1", and none of your expressions do that. You need to use substitute() or bquote() to edit a formula. For example, I think both of these should work:

removeTerm <- function(linModel, termName)
   update(linModel, bquote(. ~ . - .(as.name(termName))))


removeTerm <- function(linModel, termName)
   update(linModel, substitute(. ~ . - x, list(x=as.name(termName))))

Duncan Murdoch

______________________________________________
R-help@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.

Reply via email to