I'm trying to write a package which uses classes/methods as defined in the `methods' package. I have a single .R file which defines the class and various methods for that class. At the top of the file I have require(methods) and then setClass("myclass", ...) setGeneric("intersect") setMethod("intersect", "myclass", function(x,y) ...) I noticed that when I build the package and subsequently load it via library(), the methods show up in the global workspace, which is not quite what I wanted. In general, is there any documentation on building packages with the `methods' package (i.e. is it any different from building packages without `methods'?) or perhaps an R-help thread I should look for? In short, how should I setup my package so that my methods do not show up in the global workspace? Thanks, -roger _______________________________ UCLA Department of Statistics rpeng at stat.ucla.edu http://www.stat.ucla.edu/~rpeng
Take a look at the Bioconductor packages for some examples, i.e. Biobase and affy, but others as well. best, -tony>>>>> "roger" == Roger Peng <rpeng at stat.ucla.edu> writes:roger> I'm trying to write a package which uses classes/methods as roger> defined in the `methods' package. I have a single .R file roger> which defines the class and various methods for that class. roger> At the top of the file I have roger> require(methods) roger> and then roger> setClass("myclass", ...) setGeneric("intersect") roger> setMethod("intersect", "myclass", function(x,y) ...) roger> I noticed that when I build the package and subsequently roger> load it via library(), the methods show up in the global roger> workspace, which is not quite what I wanted. roger> In general, is there any documentation on building packages roger> with the `methods' package (i.e. is it any different from roger> building packages without `methods'?) or perhaps an R-help roger> thread I should look for? roger> In short, how should I setup my package so that my methods roger> do not show up in the global workspace? roger> Thanks, roger> -roger _______________________________ UCLA Department of roger> Statistics rpeng at stat.ucla.edu roger> http://www.stat.ucla.edu/~rpeng roger> ______________________________________________ roger> R-help at stat.math.ethz.ch mailing list roger> http://www.stat.math.ethz.ch/mailman/listinfo/r-help -- A.J. Rossini Rsrch. Asst. Prof. of Biostatistics U. of Washington Biostatistics rossini at u.washington.edu FHCRC/SCHARP/HIV Vaccine Trials Net rossini at scharp.org -------------- http://software.biostat.washington.edu/ ---------------- FHCRC: M: 206-667-7025 (fax=4812)|Voicemail is pretty sketchy/use Email UW: Th: 206-543-1044 (fax=3286)|Change last 4 digits of phone to FAX (my tuesday/wednesday/friday locations are completely unpredictable.)
The problem here is that the standard R way of attaching a package is to source in the R code; when the code contains setMethod() calls and the like, the result is to store the resulting definitions in the global environment. When you're writing packages using methods, you essentially always want to use an alternative installation for the package, which creates a binary image when R INSTALL runs. This image is loaded when the package is attached by calling library(), and the objects for methods, etc. are in the package database,as you would like. There's a paragraph in the online documentation for INSTALL that describes what to do. (if you want a quick fix, just touch an empty file install.R in the package's top level directory.) When you run INSTALL, you should see a line: ** save image in the printout. And no files generated in the global environment from calling library() Regards, John Chambers Roger Peng wrote:> > I'm trying to write a package which uses classes/methods as defined in the > `methods' package. I have a single .R file which defines the class and > various methods for that class. At the top of the file I have > > require(methods) > > and then > > setClass("myclass", ...) > setGeneric("intersect") > setMethod("intersect", "myclass", function(x,y) ...) > > I noticed that when I build the package and subsequently load it via > library(), the methods show up in the global workspace, which is not quite > what I wanted. > > In general, is there any documentation on building packages with the > `methods' package (i.e. is it any different from building packages without > `methods'?) or perhaps an R-help thread I should look for? > > In short, how should I setup my package so that my methods do not show up > in the global workspace? > > Thanks, > > -roger > _______________________________ > UCLA Department of Statistics > rpeng at stat.ucla.edu > http://www.stat.ucla.edu/~rpeng > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > http://www.stat.math.ethz.ch/mailman/listinfo/r-help-- John M. Chambers jmc at bell-labs.com Bell Labs, Lucent Technologies office: (908)582-2681 700 Mountain Avenue, Room 2C-282 fax: (908)582-3340 Murray Hill, NJ 07974 web: http://www.cs.bell-labs.com/~jmc