[Rd] speedbump in library
Winston Chang
winstonchang1 at gmail.com
Fri Jan 23 17:15:53 CET 2015
I think you can simplify a little by replacing this:
pkg %in% loadedNamespaces()
with this:
.getNamespace(pkg)
Whereas getNamespace(pkg) will load the package if it's not already
loaded, calling .getNamespace(pkg) (note the leading dot) won't load
the package.
I can't speak to whether there are any pitfalls in changing the
library path searching, though.
-Winston
On Thu, Jan 22, 2015 at 12:25 PM, Peter Haverty <haverty.peter at gene.com> wrote:
> Hi all,
>
> Profiling turned up a bit of a speedbump in the library function. I
> submitted a patch to the R bug tracker as bug 16168 and I've also
> included it below. The alternate code is simpler and easier to
> read/maintain, I believe. Any thoughts on other ways to write this?
>
> Index: src/library/base/R/library.R
> ===================================================================
> --- src/library/base/R/library.R (revision 67578)
> +++ src/library/base/R/library.R (working copy)
> @@ -688,18 +688,8 @@
> out <- character()
>
> for(pkg in package) {
> - paths <- character()
> - for(lib in lib.loc) {
> - dirs <- list.files(lib,
> - pattern = paste0("^", pkg, "$"),
> - full.names = TRUE)
> - ## Note that we cannot use tools::file_test() here, as
> - ## cyclic namespace dependencies are not supported. Argh.
> - paths <- c(paths,
> - dirs[dir.exists(dirs) &
> - file.exists(file.path(dirs,
> - "DESCRIPTION"))])
> - }
> + paths <- file.path(lib.loc, pkg)
> + paths <- paths[ file.exists(file.path(paths, "DESCRIPTION")) ]
> if(use_loaded && pkg %in% loadedNamespaces()) {
> dir <- if (pkg == "base") system.file()
> else getNamespaceInfo(pkg, "path")
>
> Pete
>
> ____________________
> Peter M. Haverty, Ph.D.
> Genentech, Inc.
> phaverty at gene.com
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list