[Rd] .libPaths() on Windows may return duplicated paths
Henrik Bengtsson
hb at biostat.ucsf.edu
Wed Mar 16 04:13:01 CET 2011
In R v2.12.2 patched (2011-03-13 r54787) and also in R v2.13.0 devel
(2011-03-15 r54806), .libPaths() may return the multiple paths
referring to the same "normalized" path name. Here is an example from
Rterm --vanilla using R v2.12.2 patched:
> paths <- .libPaths(c("C:/", "C:\\"))
> paths
[1] "C:/"
[2] "C:\\"
[3] "C:/PROGRA~1/R/R-2.13.0dev/library"
The reason is that .libPaths() does not detect paths[1] and paths[2]
to be "equal";
> .libPaths
function (new)
{
if (!missing(new)) {
new <- Sys.glob(path.expand(new))
paths <- unique(path.expand(c(new, .Library.site, .Library)))
.lib.loc <<- paths[file.info(paths)$isdir %in% TRUE]
}
else .lib.loc
}
One solution would be to replace:
paths <- unique(path.expand(c(new, .Library.site, .Library)))
with
paths <- path.expand(c(new, .Library.site, .Library))
paths <- utils::normalizePath(paths)
paths <- unique(paths)
This would obviously not work because this would make .libPaths()
depend on the utils package as standing. Migrating normalizePath() to
the 'base' package would be one solution.
Finally, this causes update.packages() to try to download and install
the same package multiple times, e.g.
> .libPaths()
[1] "C:\\Users\\hb/R/win-library/2.12"
[2] "C:/PROGRA~1/R/R-2.12.2patched/library"
[3] "C:\\Users\\hb\\R\\win-library\\2.12"
> update.packages()
digest :
Version 0.4.1 installed in C:\Users\hb/R/win-library/2.12
Version 0.4.2 available at http://cran.stat.ucla.edu
Update (y/N/c)? y
digest :
Version 0.4.1 installed in C:\Users\hb\R\win-library\2.12
Version 0.4.2 available at http://cran.stat.ucla.edu
Update (y/N/c)? y
...
Obviously, I know how to fix/avoid this myself, but I figured it is
more generic if .libPaths() does it for everyone.
/Henrik
More information about the R-devel
mailing list