¿Qué se supone que debe suceder si un paquete está instalado en varias bibliotecas? Por ejemplo, en Debian/Ubuntu uno puede instalar paquetes debianizados a través de apt-get, y luego también instalar una versión más reciente del mismo paquete directamente desde CRAN. Al usar library(), ¿se cargará el paquete más reciente o depende del orden de .libPaths()?El mismo paquete R en varias bibliotecas
Respuesta
Como ya lo expresaron otros, .libPaths()
es importante que los paquetes locales se busquen primero ya que las versiones de distro, especialmente con Debian estable o versiones de Ubuntu que no se actualizan, tienen más probabilidades de ser más antiguas .
hay un comentario a este efecto en el archivo de configuración de /etc/R/Renviron
que:
# edd Apr 2003 Allow local install in /usr/local, also add a directory for
# Debian packaged CRAN packages, and finally the default dir
# edd Jul 2007 Now use R_LIBS_SITE, not R_LIBS
R_LIBS_SITE=${R_LIBS_SITE-'/usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library'}
Así que un valor establecido por el usuario de R_LIBS_SITE
obtendría precedencia, de lo contrario se utiliza el valor que se muestra aquí.
Según tengo entendido, dependerá del orden de .libPaths(). Este es el código de library
if (!missing(package)) {
if (is.null(lib.loc))
lib.loc <- .libPaths()
lib.loc <- lib.loc[file.info(lib.loc)$isdir %in% TRUE]
# >>>> snipped code
newpackage <- is.na(match(pkgname, search()))
if (newpackage) {
pkgpath <- find.package(package, lib.loc, quiet = TRUE,
verbose = verbose)
if (length(pkgpath) == 0L) {
# snipped
Y esto es de la página de ayuda para find.package
Details
find.package returns path to the locations where the given packages are found.
If lib.loc is NULL, then attached packages are searched before the libraries.
If a package is found more than once, the first match is used.
Y si hay más de un caso, entonces debe haber una advertencia sobre la base de mi lectura de la find.package
código (a menos que establezca "detallado" que es falsa):
if (length(paths) > 1L) {
paths <- paths[1L]
if (verbose)
warning(gettextf("package %s found more than once,\n
using the one found in %s",
sQuote(pkg), sQuote(paths)), domain = NA)
Si instala paquetes usando apt-get, que será el usuario sudo, por lo Librari es se instalará en la ubicación de todo el sistema (generalmente/usr/lib/R).
Cuando utiliza CRAN también puede ser sudo o un usuario normal. En el primer caso, los paquetes se instalarán en todo el sistema (sobreescribiendo archivos instalados usando apt-get); en el segundo caso, los paquetes se instalarán en $ HOME/R del usuario.
Donde existe un paquete en/usr/lib/R y $ HOME/R, la primera ubicación en .libPaths() se utilizará en la carga (que generalmente es $ HOME/R).
EDIT: como señaló Dirk, las instalaciones en todo el sistema deberían ir a/usr/local/lib/R /, no/usr/lib/R. Sin embargo, mi punto general es: la ubicación de la instalación depende de los permisos del usuario y el orden de carga depende de .libPaths().
Eso no es correcto, al menos no _si usa los binarios R prefabricados para Ubuntu o Debian_ ya que configuramos 'R_LIBS' y otros para que las instalaciones locales siempre vayan a'/usr/local/lib/R/'. Ese esquema ha funcionado desde 2003 más o menos para miles de usuarios. –
Entonces, ¿qué ocurre si ejecuto update.packages()? ¿Intentará sobrescribir los archivos dentro de '/ usr/lib/R', o instalará copias en'/usr/local/lib/R'? – Jeroen
Dirk puede aclarar: en mi sistema, veo paquetes en/usr/lib/R/site-library/y/usr/local/lib/R/site-library /. Parece, por ejemplo, que r-cran-rjava se ha instalado en/usr/lib/R/site-library/rJava. – neilfws
- 1. ¿Cómo se usan varias versiones del mismo paquete R?
- 2. Migrando bibliotecas R
- 3. R instala el paquete globalmente
- 4. El paquete contiene el objeto y el paquete con el mismo nombre
- 5. Fusionar varias bibliotecas .so compartidas
- 6. Haskell Cabal: "paquete depende indirectamente de varias versiones del mismo paquete"
- 7. paquete rutas relativas en R
- 8. Dependencias del paquete R
- 9. R: paquete rJava instalar en su defecto
- 10. Ver el origen de un paquete R
- 11. Administración de activos externos en el paquete R
- 12. Agregue el mismo método a varias clases
- 13. El uso de paquete 'Brobdingnag' en el lenguaje R
- 14. ¿El sufijo de identificación del paquete es el mismo que el identificador del paquete en info.plist?
- 15. Cargue un paquete solo cuando sea necesario en el paquete R
- 16. Crear clases en el mismo paquete en jar por separado
- 17. ¿Cómo editar el mismo archivo en varias pestañas en vim?
- 18. gitosis: mismo usuario varias máquinas
- 19. trabajando con paquete sin Namespace en R
- 20. R - Paquete de Google Analytics
- 21. Plot múltiples columnas en el mismo gráfico en R
- 22. Mismo formato de fecha en varias localizaciones
- 23. paquete minificado JS y bibliotecas externas
- 24. R + ggplot: trazado en varias páginas
- 25. Leyenda común para varias parcelas en R
- 26. dependencias del paquete hackage y bibliotecas preparadas para el futuro
- 27. Acceso a clase interna privada en el mismo paquete
- 28. Las pruebas unitarias deben ubicarse en el mismo paquete?
- 29. No se puede encontrar la clase en el mismo paquete
- 30. No se puede cargar el paquete tcltk en R
+1 para la respuesta específica de Debian y la descripción de la lógica que usó en el diseño. –