Dominick Samperi
2010-Oct-27 17:22 UTC
[Rd] Sections 5.8.1 and 5.8.2 of Writing R Extensions (LinkingTo)
Hello, In Sections 5.8.1 and 5.8.2 of Writing R Extensions the following pattern is suggested for getting the path to a file in another package: PKGB_PATH=‘echo ’library(packB); cat(system.file("libs", package="packB"))’ \ | ${R_HOME}/bin/R --vanilla --slave‘ Is the library(packB) really needed here? It is not needed on two systems that I have tested: Windows and Linux. What about MacOS? If loading packB requires loading many other packages or doing expensive initialization it would be much more efficient if we could omit library(packB) here. On the other hand, keeping library(packB) has one possible advantage, namely, it may eliminate the need to add packB.dll to the loader's search path. So there is a trade-off of convenience vs efficiency. Thanks, Dominick [[alternative HTML version deleted]]
Simon Urbanek
2010-Oct-27 18:43 UTC
[Rd] Sections 5.8.1 and 5.8.2 of Writing R Extensions (LinkingTo)
On Oct 27, 2010, at 1:22 PM, Dominick Samperi wrote:> Hello, > > In Sections 5.8.1 and 5.8.2 of Writing R Extensions the following pattern is > suggested > for getting the path to a file in another package: > > PKGB_PATH=?echo ?library(packB); cat(system.file("libs", package="packB"))? > \ > | ${R_HOME}/bin/R --vanilla --slave? > > Is the library(packB) really needed here?Not that I'm aware of - it's just a check that that package can be used. If you omit it you will get an empty string and no error on failure.> It is not needed on two systems > that > I have tested: Windows and Linux. What about MacOS? > > If loading packB requires loading many other packages or doing expensive > initialization it would be much more efficient if we could omit > library(packB) > here. > > On the other hand, keeping library(packB) has one possible advantage, > namely, > it may eliminate the need to add packB.dll to the loader's search path.Not really since that sub-process will die when finished so it won't have any effect on any search path. BTW: system.file("libs",...) doesn't do the job these days since it will be missing R_ARCH so you need something like system.file("libs",.Platform$r_arch, package=...) for any more recent R. Cheers, Simon> So > there > is a trade-off of convenience vs efficiency. > > Thanks, > Dominick > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel