Hi Oleg -- "Sklyar, Oleg (London)" <oskl...@maninvestments.com> writes:
> Dear List: > > Sorry for posting maybe a trivial question, but I have a basic > understanding problem. If I have say pack1 and pack2, two R packages, > and pack2 depends on and imports pack1 fully (as in the code below), is > there a way to make all the functionality of pack1 available for the > global and other environments (not only for the functions called from > withing pack2) by loading pack2 only? I thought if pack2 depends on and > imports pack1 and essentially reexports everything, one should get the > full functionality simply by loading pack2. This does not seem to be the > case or I am missing something trivial in my NAMESPACE/DESCRIPTION > files? I think that exportPattern does a simple ls() on the environment of the package name space. The imported symbols are not defined in that environment, but (I think) in a variable .__NAMESPACE__. and so are not discovered. Arguably, exportPattern (and friends) should be smarter. Pragmatically, you need to re-export imported symbols explicitly. I haven't worked this through entirely, and could be wrong... Martin > If this is documented in Writing R Extensions, I would be thankful for a > page number and maybe a quick fix in my example below as so far I have > not been able to find a clear explanation. > > The problem can be illustrated by the following simple example (this is > a simple code for 2 packages, pack1 and pack2; plus an example). > > Thank you for your replies. > > Dr Oleg Sklyar > Research Technologist > AHL / Man Investments Ltd > +44 (0)20 7144 3107 > oskl...@maninvestments.com > > --- pack1: DESCRIPTION ------ > Package: pack1 > Version: 0.0.1 > Date: 12 Jan 2009 > Title: pack1 to test S3/S4 methods compatibility > Author: Oleg Sklyar > Depends: R (>= 2.7.1), methods > Maintainer: Oleg Sklyar <oskl...@maninvestments.com> > Description: pack1 > LazyLoad: yes > License: Proprietary > URL: http://www.maninvestments.com > LazyLoad: no > > --- pack1: NAMESPACE ------ > import(methods) > exportPattern("^[^\\.]") > exportClasses(posixTime) > exportMethods(as.POSIXct) > > --- pack1: posix.R ------ > setClass("posixTime", "numeric") > > setGeneric("as.POSIXct") > setMethod("as.POSIXct", signature(x="posixTime"), > function(x, tz) { > z = x...@.data > attr(z,"class") = c("POSIXt", "POSIXct") > attr(z,"tzone") = "UTC" > z > } > ) > > testPosixVal = new("posixTime", as.numeric(Sys.time())) > > --- pack2: DESCRIPTION > Package: pack2 > Version: 0.0.1 > Date: 12 Jan 2009 > Title: pack2 to test S3/S4 methods compatibility > Author: Oleg Sklyar > Depends: R (>= 2.7.1), methods > Maintainer: Oleg Sklyar <oskl...@maninvestments.com> > Description: pack2 > LazyLoad: yes > License: Proprietary > URL: http://www.maninvestments.com > LazyLoad: no > > --- pack2: NAMESPACE ------ > import(pack1) > exportPattern("^[^\\.]") > > --- pack2: posix.R ------ > testPosix = function() { > z = as.POSIXct(testPosixVal) > print(z) > print(class(z)) > z > } > > ------ test code to run from global env, showing problems ------- > require(pack2) > > ## use as.POSIXct imported into pack2 from pack1 to do the conversion in > the fun > testPosix() > #~ [1] "2009-01-13 15:29:50 UTC" > #~ [1] "POSIXt" "POSIXct" > #~ [1] "2009-01-13 15:29:50 UTC" > > ## now try using it directly from the global env (pack1 was not > explicitly loaded) > as.POSIXct(pack1::testPosixVal) > #~ Error in as.POSIXct.default(pack1::testPosixVal) : > #~ do not know how to convert 'pack1::testPosixVal' to class "POSIXlt" > > ## now require pack1 explicitly and try again > require(pack1) > as.POSIXct(pack1::testPosixVal) > #~ [1] "2009-01-13 15:29:50 UTC" > > > ********************************************************************** > Please consider the environment before printing this email or its attachments. > The contents of this email are for the named addressees ...{{dropped:19}} > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Martin Morgan Computational Biology / Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109 Location: Arnold Building M2 B169 Phone: (206) 667-2793 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel