Sorry Simon, you are right. I tried to recreate a problem that I had with other packages where the packages were added to Depends but made a mistake. However the problem remains if I do the following.
Added: pack1 to Depends of pack2. Now I create pack3 with the following contents: it does not import pack1 directly, nor depends on it. It rather imports pack2 and depends on pack2. I then expect the functionality of pack1 to be available still if I only load pack3. But I now get errors with pack3 calling the function from pack1. Does this mean I need to import and depend on pack1 and methods explicitly in pack3. I.e. do I have to import and depend on ALL the packages that may be in use, even if they are imported by other that I depend on and import: ---- pack3: DESCRIPTION ----- Package: pack3 Version: 0.0.1 Date: 12 Jan 2009 Title: pack1 to test S3/S4 methods compatibility Author: Oleg Sklyar Depends: R (>= 2.7.1), pack2 Maintainer: Oleg Sklyar <oskl...@maninvestments.com> Description: pack3 LazyLoad: yes License: Proprietary URL: http://www.maninvestments.com LazyLoad: no ---- pack3: NAMESPACE ------ import(pack2) exportPattern("^[^\\.]") ---- pack3: posix.R ------ testPosix2 = function() { z = as.POSIXct(testPosixVal) print(z) print(class(z)) z } Note, that the above function is the same as in pack2, just a different name. *** R 2.9.0 (svn -r 46585) [/share/research/R-devel/20081002/lib64/R] *** > library(pack3) Loading required package: pack2 Loading required package: pack1 > as.POSIXct(pack1::testPosixVal) [1] "2009-01-13 15:29:50 UTC" > testPosxi() ## called from pack2 [1] "2009-01-13 15:29:50 UTC" [1] "POSIXt" "POSIXct" [1] "2009-01-13 15:29:50 UTC" > testPosix2() ## called from pack3 Error in as.POSIXct.default(testPosixVal) : do not know how to convert 'testPosixVal' to class "POSIXlt" Dr Oleg Sklyar Research Technologist AHL / Man Investments Ltd +44 (0)20 7144 3107 oskl...@maninvestments.com > -----Original Message----- > From: Simon Urbanek [mailto:simon.urba...@r-project.org] > Sent: 14 January 2009 01:51 > To: Sklyar, Oleg (London) > Cc: r-devel@r-project.org > Subject: Re: [Rd] particulars of importing/loading libraries > > Oleg, > > On Jan 13, 2009, at 11:00 , Sklyar, Oleg (London) wrote: > > > 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? > > > > 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). > > > > if you bothered to use R CMD check you would find your bug right away: > * checking package dependencies ... ERROR > Namespace dependencies not required: > pack1 > > You simply forgot to add pack1 to the Depends: line - that's > all. Once > you fix that, you'll see what happens: > > > library(pack2) > Loading required package: pack1 > > as.POSIXct(pack1::testPosixVal) > [1] "2009-01-14 01:38:08 UTC" > > Cheers, > S > > > > 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 > > > > > > ********************************************************************** 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