[R] using setMethod or setGeneric to change S4 accessor symbol from @ to $

Martin Morgan mtmorgan at fhcrc.org
Mon Feb 8 20:44:11 CET 2010

On 02/07/2010 08:31 PM, Markus Weisner wrote:
> I created some S4 objects that are essentially data frame objects.  The S4
> object definitions were necessary to verify data integrity and force a
> standardized data format.  I am, however, finding myself redefining all the
> typical generic functions so that I can still manipulate my S4 objects as if
> they were data frames ... I have used setMethod to set methods for "subset",
> "head", and "tail".  I would like to use setMethod or setGeneric to enable
> me to use object$slotname to access object at slotname for my S4 objects.  Any
> advice is appreciated.  Thanks.

Hi Markus --

> setClass("A", representation(a="numeric"))
[1] "A"
> new("A")$a
Error in new("A")$a : $ operator not defined for this S4 class
> getGeneric("$")
standardGeneric for "$" defined from package "base"

function (x, name)
standardGeneric("$", .Primitive("$"))
<environment: 0xa62028>
Methods may be defined for arguments: x
Use  showMethods("$")  for currently available ones.
> setMethod("$", "A", function(x, name) slot(x, name))
[1] "$"
> new("A", a=1:10)$a
 [1]  1  2  3  4  5  6  7  8  9 10
> new("A", a=1:10)$b
Error in slot(x, name) : no slot of name "b" for this object of class "A"

does that help?


> --Markus
> 	[[alternative HTML version deleted]]
> ______________________________________________
> 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.

Martin Morgan
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793

More information about the R-help mailing list