[R] Making an S3 object act like a data.frame

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Mar 9 10:54:18 CET 2006

On Tue, 7 Mar 2006, hadley wickham wrote:

>> I tend to have to use trial and error myself.  Here is another
>> possibility.
> That's got the subsetting solved, so here's the next challenge
>> lm(x ~ y, z)
> Error in as.data.frame.default(data) : cannot coerce class "myobj"
> into a data.frame
>> as.data.frame.myobj <- function(x) x[[1]]
>> lm(x ~ y, z)
> Error in eval(expr, envir, enclos) : numeric 'envir' arg not of length one
> I'm guessing this is pretty much impossible to get around, because
> there is no way to tell eval how to deal with myobj type objects, and
> lm only dispatches based on the type of the first argument.

Did you write an as.data.frame method?  From ?model.frame

     data: 'data.frame', list, 'environment' or object coercible to
           'data.frame' containing the variables in 'formula'.  Neither
           a matrix nor an array will be accepted.

so I believe that an as.data.frame method is all that is required.

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-help mailing list