[R] question on formula and terms.formula()

William Dunlap wdunlap at tibco.com
Thu Jul 14 17:56:16 CEST 2011


I think you should replace
   terms.formula(formula)
by
   terms(formula)
When terms() is given a formula object it will
execute terms.formula but for other classes of
inputs it will invoke the appropriate method.
E.g., your formula may already be a terms object,
in which case terms.formula(formula) will waste
time reanalyzing it while terms(formula) will
invoke terms.terms, which just returns its input.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com 

-----Original Message-----
From: Pang Du [mailto:pangdu at vt.edu] 
Sent: Thursday, July 14, 2011 8:36 AM
To: William Dunlap; r-help at r-project.org
Subject: RE: [R] question on formula and terms.formula()

Thank you so much for your suggestion, Bill.

The R program I try to modify needs match.call() for something else. But the
problem does seem to be caused by this statement as you suggested. Following
this clue, I find out that 

terms.formula(formula)

does essentially what I want for "terms.formula(mf$formula)".

Pang Du
Virginia Tech


-----Original Message-----
From: William Dunlap [mailto:wdunlap at tibco.com] 
Sent: Wednesday, July 13, 2011 12:21 PM
To: pangdu at vt.edu; r-help at r-project.org
Subject: RE: [R] question on formula and terms.formula()

Does your code work if you omit the match.call step?  terms()
generally doesn't need that.  Also, do not call terms.formula(formula):
call just terms(formula).  The terms method appropriate to the class
of the formula will be used.

  > f1 <- function(formula, ...) {
  +     terms(formula, ...)
  + }
  > form <- as.formula("y ~ x1 + Error(x2)")
  > f1(form, specials="Error")
  y ~ x1 + Error(x2)
  attr(,"variables")
  list(y, x1, Error(x2))
  attr(,"factors")
            x1 Error(x2)
  y          0         0
  x1         1         0
  Error(x2)  0         1
  attr(,"term.labels")
  [1] "x1"        "Error(x2)"
  attr(,"specials")
  attr(,"specials")$Error
  [1] 3
  attr(,"order")
  [1] 1 1
  attr(,"intercept")
  [1] 1
  attr(,"response")
  [1] 1
  attr(,".Environment")
  <environment: R_GlobalEnv>

Bill Dunlap
TIBCO Spotfire
________________________________________
From: r-help-bounces at r-project.org [r-help-bounces at r-project.org] on behalf
of pangdu at vt.edu [pangdu at vt.edu]
Sent: Tuesday, July 12, 2011 8:40 PM
To: r-help at r-project.org
Subject: [R] question on formula and terms.formula()

I'm trying to create a formula object to pass on to a function that
applies the function terms.formula() to it.

f <- function(formula, ...)
{
...
mf <- match.call()
term <- terms.formula(mf$formula)
...
}

However, my code below gives an error.

form <- as.formula("y~x")
f(form, ...)

The error message was:
Error in terms.formula(mf$formula): argument is not a valid model.

Could anybody help me figure out the problem and find a solution here?

______________________________________________
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.=



More information about the R-help mailing list