On 02/08/2010 01:22 PM, Markus Weisner wrote: > Worked like a charm!! Thank you so much. I just plugged the following into > my code ... > > setMethod("$", "CADresponses", function(x, name) slot(x, name)) > > ... and it worked perfect. If you don't mind, I have a quick follow up > question, using your example > > setClass("A", representation(a="numeric", b="numeric")) > setMethod("$", "A", function(x, name) slot(x, name)) > data = new("A", a=1:10, b=1:10) > data$a[5] #now works thanks to your code > data$a[5] <- 200 #assignments do not work -- any ideas?
same idea, but for "$<-" > setClass("A", representation(a="numeric")) [1] "A" > getGeneric("$<-") standardGeneric for "$<-" defined from package "base" function (x, name, value) standardGeneric("$<-", .Primitive("$<-")) <environment: 0x14c33a8> Methods may be defined for arguments: x, value Use showMethods("$<-") for currently available ones. > setReplaceMethod("$", "A", function(x, name, value) { + slot(x, name) <- value + x + }) [1] "$<-" > a <- new("A", a=1:10) > a$a <- 10:1 > a An object of class "A" Slot "a": [1] 10 9 8 7 6 5 4 3 2 1 > data[5,c("a")] = 200 #would also like this to work -- any ideas? > > Do you have any suggestions for getting assignments and brackets to work as > they would for data frames? Thanks so much for your help. same approach, but using getGeneric("[") and getGeneric("[<-") to guide you. Martin > Best, > Markus > > > > On Mon, Feb 8, 2010 at 2:44 PM, Martin Morgan <mtmor...@fhcrc.org> wrote: > >> 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 obj...@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? >> >> Martin >> >>> --Markus >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> 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. >> >> >> -- >> 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 >> > -- 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 ______________________________________________ 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.