[R] stumped by eval

Berwin A Turlach berwin at maths.uwa.edu.au
Wed Feb 13 10:39:39 CET 2008


G'day Peter,

On Wed, 13 Feb 2008 08:03:07 +0100
Peter Dalgaard <p.dalgaard at biostat.ku.dk> wrote:

> Ross Boylan wrote:
> > In the following example, the inner evaluation pulls in the global
> > value of subset (a function) rather than the one I thought I was
> > passing in (a vector).  Can anyone help me understand what's going
> > on, and what I need to do to fix the problem?

[...]

> The point is that subset (and offset) arguments are subject to the
> same evaluation rules as the terms inside the formula: First look in
> "data", then in the environment of the formula, which in this case is
> the global environment.

Perhaps I have a [senior|blonde]-day today, but this does not seem to
be the full explanation about what is going on to me.  According to this
explanation the following should not work:

> lm(Reading~0+Spec+Reader, netto, subset=c(1) )

Call:
lm(formula = Reading ~ 0 + Spec + Reader, data = netto, subset = c(1))

Coefficients:
  Spec  Reader  
     1      NA  

since the value passed to subset is not part of "data" and not in the
global environment. But, obviously, it works.  OTOH, if we change f0 to

> f0
function(formula, data, subset, na.action)
{
  lm(formula, data, subset=subset, na.action=na.action)
}

then we get the same behaviour as with Ross's use of f1 inside of f0:

> t3 <- f0(Reading~0+Spec+Reader, netto, c(1) )
Error in xj[i] : invalid subscript type 'closure'

More over, with the original definition of f0:
> f0
function(formula, data, subset, na.action)
{
  f1(formula, data, subset, na.action)
}
> (f1(Reading~0+Spec+Reader, netto, subset= Spec==1 ))
  Reading Spec Reader
1       1    1      1
> f0(Reading~0+Spec+Reader, netto, subset= Spec==1 )
Error in xj[i] : invalid subscript type 'closure'

Given your explanation, I would have expected this to work.

Reading up on `subset' in ?model.frame also does not seem to shed light
onto what is going on.

Remaining confused.....

Cheers,

	Berwin



More information about the R-help mailing list