I believe that a recommended S4 convention is simply to write methods for slot extraction with the same name as the slot. Thus, for an object,x of class 'myclass'
slotname(x) would give [EMAIL PROTECTED] This is a more natural interface than either @ or $ (and I am not sure that methods for $ can be defined due to S3/S4 class consistency details). Obviously, it is trivial, but a bit tedious, to manually write such methods for any class you care to. However, I wrote a small generator function that automatically generates the slot extraction methods for any class if you wish to do things this way. I just run this right after I've define a new class,'myclass', to generate slot access methods by: slotget('myclass') The code is below. I would appreciate feedback on any errors or suggestions for improvement. Cheers, -- Bert Gunter Genentech Non-Clinical Statistics South San Francisco, CA slotGet<-function(x,where=topenv()) #automatically generates accessor and replacement methods for class x { if(!isClass(x,where=where))stop(paste('Class',x,'not found')) slots<-slotNames(getClass(x,where=where)) for(slt in slots){ ## slot accessor fun<-function(object)NULL if(!isGeneric(slt,where=where)){ if(exists(slt,where=where,mode="function")) fun<-get(slt,pos=where,mode="function") else body(fun)<-substitute(standardGeneric(slt)) setGeneric(slt,fun,where=where) } if(!existsMethod(slt,x,where=where)){ body(fun)<-substitute([EMAIL PROTECTED]) setMethod(slt,x,fun,where=where) } } invisible() } > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Uwe Ligges > Sent: Friday, November 18, 2005 8:46 AM > To: Ulrike Grömping > Cc: r-help@stat.math.ethz.ch > Subject: Re: [R] Method for $ > > Ulrike Grömping wrote: > > > Dear R experts, > > > > I have defined a class "myclass" and would like the slots > to be extractable > > not only by "@" but also by "$". I now try to write a > method for "$" that > > simply executes the request [EMAIL PROTECTED], whenever someone calls > > object$slotname for any object of class "myclass". > > I don't manage to find out how I can provide this function > with "slotname", > > so that one and the same function works for any arbitrary > slotname a user > > might choose. > > > > I have tried > > > > setMethod("$", signature(x="myclass"), function(x,slotname){ > > [EMAIL PROTECTED] > > } > > ) > > > Ulrike, > > what about (untested!): > slot(x, slotname) > > Best wishes from Dortmund and Lena, > Uwe Ligges > > > > This produced the error message: > > In method for function "$": expanding the signature to > > include omitted arguments in definition: name = "missing" > > Error in rematchDefinition(definition, fdef, mnames, > fnames, signature) : > > methods can add arguments to the generic only if > '...' is an argument > > to the generic > > > > My searches for a solution of this problem have not been > successful. Can > > someone help? > > > > Thanks and regards, > > Ulrike Grömping, Berlin > > > > ______________________________________________ > > R-help@stat.math.ethz.ch mailing list > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html