Cambiar la ruta de la biblioteca predeterminada de R usando .libPaths en Rprofile.site no funciona

206

Estoy ejecutando R en Windows, no como administrador. Cuando instalo un paquete, el siguiente comando no funciona:

> install.packages("zoo")
Installing package(s) into ‘C:/Program Files/R/R-2.15.2/library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "C:/Program Files/R/R-2.15.2/library"' is not writable

Para instalar un paquete, tengo que especificar una ubicación de biblioteca:

install.packages("zoo", lib="C:/software/Rpackages")

Para cargar un paquete, también tengo que especificar la ubicación de la biblioteca:

library("zoo", lib.loc="C:/software/Rpackages")

Todo esto está bien, pero quería ver si podía agregar C:/software/Rpackagesa la ruta de la biblioteca de alguna manera y así no tener que escribirlo cada vez.

Mientras buscaba en línea, descubrí que una forma de hacerlo es editar el Rprofile.sitearchivo y agregar la línea

.libPaths("C:/software/Rpackages")

Sin embargo, después de hacer esto e iniciar RStudio, este es el resultado que obtengo

> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 

¡El .libPathscomando que agregué al Rprofile.siteno parece haber tenido ningún efecto! ¿Por qué es este el caso? O, lo que es más importante, ¿cómo puedo solucionar el problema para poder instalar y cargar paquetes sin escribir la ubicación de la biblioteca?

Nota: si inicio RStudio, el .libPaths()comando parece funcionar como se supone que debe

.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"

¿No es extraño?

Me gusta codificar
fuente
¿Puedes ampliar un poco cómo exactamente install.packages("zoo")no funciona? Mensaje de error, etc.
joran
1
@joran añadí el mensaje de error cuando intento install.packages("zoo")--- pero ese no es mi verdadera pregunta, que es acerca de por qué .libPaths()en Rprofile.siteno funciona.
Me gusta codificar el
1
¿Tiene el mismo problema si usa RGui en lugar de R Studio?
Dason
66
¿Por qué las rutas de la biblioteca de R predeterminan a las carpetas que necesitan permisos de administrador? Sin duda, el directorio personal del usuario sería más sensato
geotheory
superuser.com/questions/749283/... Editar ~ / .Renviron R_LIBS_USER = / some / ruta
bowen.li

Respuestas:

171

Por lo general, trato de mantener todos mis paquetes en una biblioteca, pero si desea agregar una biblioteca, ¿por qué no agregar la nueva biblioteca (que ya debe existir en su sistema de archivos) a la ruta de la biblioteca existente?

.libPaths( c( .libPaths(), "~/userLibrary") )

O (y esto hará que userLibrary sea el primer lugar para colocar nuevos paquetes):

.libPaths( c( "~/userLibrary" , .libPaths() ) )

Luego obtengo (al menos cuando escribí esto originalmente):

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"  

La .libPathsfunción es un poco diferente a la mayoría de las otras funciones no gráficas. Funciona a través de efectos secundarios. Las funciones Sys.getenvy Sys.setenvque informan y modifican las variables de entorno R se han dividido, pero .libPathspueden informar o modificar su objetivo.

La información sobre el proceso de inicio de R se puede leer en la ?Startuppágina de ayuda y hay material de RStudio en: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

En su caso, parece que RStudio no está respetando la configuración de Rprofile.site o tal vez la está anulando al leer una configuración de .Rprofile de uno de los valores predeterminados de RStudio. También debe mencionarse que el resultado de esta operación también agrega el contenido de las llamadas a , .Libraryy .Library.site, razón adicional por la cual un R alojado RStudio- (o cualquier otro IDE o red instalado-) podría exhibir un comportamiento diferente.

Como Sys.getenv()devuelve el entorno del sistema actual para el proceso R, puede ver la biblioteca y otras rutas con:

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]

Los dos que son importantes para almacenar y acceder a paquetes son (ahora diferentes en una caja de Linux):

R_LIBS_SITE                          /usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library
R_LIBS_USER                          /home/david/R/x86_64-pc-linux-gnu-library/3.5.1/
IRTFM
fuente
12
Que necesitaba para revertir el c()vector para asegurar nuevas bibliotecas van a la carpeta personalizada
geotheory
Excelente punto De hecho, la .libPathsfunción tiene el mismo efecto por defecto. También hay una diferencia entre los sistemas operativos en cómo se manejan las barras diagonales finales. (No está bien en Windows). Existen otras opciones. Ver?.libPaths
IRTFM
55
La nueva ruta tiene que existir en el sistema de archivos, de lo contrario no se agregará a la ruta de la biblioteca
jarandaf 18/04/2015
Otro buen punto. Aunque el nombre de la función sugiere lo contrario, primero puede verificar file.existsy continuar solo si no falta la ruta.
IRTFM
3
Hice esto y funciona, pero parece que tengo que cambiar el camino cada vez que inicio R. ¿Es lo mismo para los demás?
cyrusjan
215

La solución adecuada es establecer la variable de entorno R_LIBS_USERen el valor de la ruta del archivo a la carpeta de la biblioteca deseada en lugar de hacer que RStudio reconozca un archivo Rprofile.site.

Para establecer la variable de entorno R_LIBS_USERen Windows, vaya al Panel de control (Propiedades del sistema -> Propiedades avanzadas del sistema -> Variables de entorno -> Variables de usuario) a un valor deseado (la ruta a la carpeta de su biblioteca), p. Ej.

Variable name: R_LIBS_USER 
Variable value: C:/software/Rpackages  

La configuración de R_LIBS_USER asegurará que la biblioteca se muestre primero en .libPaths () independientemente de iniciar RStudio directamente o haciendo clic con el botón derecho en un archivo y "Abrir con" para iniciar RStudio.

La solución Rprofile puede funcionar si RStudio siempre se inicia haciendo clic en el acceso directo de RStudio. En este caso, será suficiente establecer el directorio de trabajo predeterminado en el directorio que aloja su Rprofile . La solución Rprofile no funciona al hacer clic en un archivo para iniciar RStudio porque eso aleja el directorio de trabajo del directorio de trabajo predeterminado.

Paweł Rumian
fuente
2
Acordado solución adecuada!
felixmc
14
Definitivamente la solución adecuada. El único inconveniente es que si su usuario no es administrador (probablemente el caso si tiene este problema para empezar), debe cambiar las variables de entorno a través del Panel de control-> Cuentas de usuario-> Cuentas de usuario-> Cambiar mi entorno variables
David Moye
1
¿Conoces el equivalente en la línea de comandos de Linux?
Diego-MX
55
Claro, solo configúrelos como sus variables de shell (en bash puede editar .bash_profiley / o .bashrc). Consulte aquí: unix.stackexchange.com/questions/117467/… Para configurarlos para la sesión actual, solo escriba en la consolaexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian
2
en lugar de establecer la variable a través del panel de control, he modificado el valor predeterminado de R_LIB_USER en el archivo Rprofile. Aquí la solución: se me ocurrió un enfoque similar, la solución se presenta como una solución a esta pregunta stackoverflow.com/questions/31707941/…
Marco
24

Logré resolver el problema colocando el código en el .Rprofilearchivo en el directorio de trabajo predeterminado.

Primero, encontré la ubicación del directorio de trabajo predeterminado

> getwd()
[1] "C:/Users/me/Documents"

Luego usé un editor de texto para escribir un .Rprofilearchivo simple con la siguiente línea

.libPaths("C:/software/Rpackages")

Finalmente, cuando comienzo Ry ejecuto .libPaths()obtengo el resultado deseado:

> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"
[3] "C:/Program Files/RStudio/R/library"
Me gusta codificar
fuente
Esto no funciona para mí (tampoco lo hace la solución de BondedDust). Creé un archivo txt y lo guardé como .Rprofile en la carpeta de getwd ().
John
2
@ John Creo que estamos diciendo lo mismo.
Me gusta codificar el
3
R lee .Rprofile desde su directorio HOME no desde su directorio ACTUAL .
Crt
Se me ocurrió un enfoque similar, la solución se presenta como una solución a esta pregunta stackoverflow.com/questions/31707941/…
Marco
Para encontrar la dirección de casa, emita el comando r Sys.getenv("HOME")en la consola r. No estoy seguro de obtener el resultado deseado. Creo que el resultado deseado es lo que mostró 42 en su respuesta stackoverflow.com/a/15170774/754550 . Utiliza .libPaths de una manera ligeramente diferente.
miracle173
11

Encontré lo que creo que es una solución aquí (gracias Carl Schwarz en SFU) por agregar una biblioteca personal que es permanente (no es necesario que la defina en cada sesión) reconocida si usa R o Rstudio, y Rstudio la trata como la predeterminado en mi máquina Mac. No lo había visto exponer esto explícitamente en SO, así que resumí los pasos que proporcionaron, para Windows y luego para Mac.

Para un sistema operativo Windows 7:

  1. Cree un directorio en la unidad donde desea tener su biblioteca personal, por ejemplo, C: \ User \ Rlibs (u otro para el que tenga permisos)

  2. Busque / vaya a "Editar variable de entorno para su cuenta" en la barra de búsqueda de Windows para editar la configuración del panel de control

  3. Haga clic en "Nuevo ..." en el medio de la ventana "Variables ambientales"

  4. En la ventana "Nueva variable de usuario", escriba R_LIBS para el "Nombre de variable" y la ruta al directorio de la biblioteca personal que creó, por ejemplo, C: \ User \ Rlibs

  5. Haga clic en Aceptar y debería ver el par Variable / Valor en la ventana Variables de usuario

  6. Haga clic nuevamente en Aceptar

Ahora, cuando inicie R (o Rstudio) y escriba el comando .libPaths(), debería ver la biblioteca personal que creó, así como la biblioteca del sistema R.

Para Mac:

  1. En su directorio "Inicio" o "nombre de usuario", cree una carpeta llamada Rlibs

  2. Inicie la aplicación de Terminal

  3. Tipo: echo "R_LIBS=~/Rlibs"> .RenvrionAsegúrese de que el caso coincida.

  4. Escriba ls -apara ver la lista completa de archivos en el directorio, que ahora debería incluir .Renvrion

  5. Verifique que el archivo .Renviron se haya configurado correctamente:more .Renviron

Inicie R / Rstudio y escriba .libPaths()y debería ver la nueva ruta a su biblioteca personal.

Whalen
fuente
8

Si no tiene derechos de administrador, también puede ser útil abrir el Rprofile.sitearchivo ubicado en \ R-3.1.0 \ etc y agregar:

.First <- function(){
  .libPaths("your path here")
}

Esto evalúa el .libPath()comando directamente al inicio

Schlusie
fuente
4

He tenido verdaderos problemas para entender esto. gorkypl dio la solución correcta anterior cuando reinstalé mi OS y Rstudio por última vez, pero esta vez, la configuración de mi variable de entorno no se resolvió.

Desinstaló R y Rstudio, creando los directorios C: \ R y C: \ Rstudio y luego reinstaló ambos.

Defina la variable de usuario R_LIBS_USER en su directorio preferido (según la respuesta de gorkypl) y reinicie su máquina para que se cargue la variable de usuario. Abra Rstudio, los errores deberían desaparecer.

También puede usar Sys.setenv()para modificar R_LIBS_USER a la ruta de su biblioteca alternativa, que es más fácil y no necesita reiniciar su computadora.

Para ver qué R_LIBS_USER está configurado: ?Sys.getenv()

La lectura help(Startup)es útil.

felixmc
fuente
2

Si su biblioteca de paquetes predeterminada ha cambiado después de instalar una nueva versión de R o por cualquier otro medio, puede agregar ambas bibliotecas para usar todos los paquetes con la ayuda de los comandos a continuación. Obtenga la ruta de la biblioteca existente:

.libPaths()

Ahora, configure la ruta existente y la anterior:

.libPaths(c(.libPaths(), "~/yourOldPath"))

Espero eso ayude.

Shivong Birla
fuente
2

simplemente cambie la carpeta predeterminada para sus bibliotecas R en un directorio sin derechos de administrador, por ejemplo

.libPaths("C:/R/libs")
Sébastien Wieckowski
fuente
1

Leí el archivo Léame. En eso mencionaron usar .libPaths () en la línea de comando para verificar qué rutas hay. Tuve 2 rutas de biblioteca antes. Cuando utilicé el comando .libpath ("C: / Archivos de programa / R / R-3.2.4 revisado / biblioteca") donde quería, cambió la ruta de la biblioteca. Cuando volví a escribir .libPaths () en la línea de comando, me mostró la ruta correcta. Espero que esto ayude

Supriya Deverkonda
fuente
1

En Ubuntu, la forma recomendada de cambiar la ruta de la biblioteca predeterminada para un usuario es establecer la R_LIBS_USERvariable en el ~/.Renvironarchivo.

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron
tzabal
fuente
0
getwd()
# [1] "C:/Users/..../software/My R studio"

copie el enlace de arriba con una coma doble invertida

.libPaths(new="C:/Users/..../software/My R studio")

Su ruta predeterminada cambiará para instalar paquetes

Sayed Mohammed Zeeshan
fuente
0

Si desea cambiar la ruta de la biblioteca de forma permanente (sin llamar a .libPath () cada vez que ingrese en R, esto funciona para mí:

  1. cree .Rprofile en su directorio de inicio. (~ / .Rprofile)

  2. escriba el .libPaths(c( .libPaths(), "your new path" )) archivo .Rprofile, guarde.

  3. abra R (cualquier directorio) y verifique, solo escriba .libPaths(), ¡puede encontrar que su ruta de libaray está actualizada!

Pengyao
fuente
-1

Estaba investigando esto porque R estaba teniendo problemas para instalar en la ubicación predeterminada y en su lugar solo estaba poniendo los paquetes en la carpeta temporal. Resultó ser la última actualización de Mcaffee Endpoint Security que aparentemente tiene problemas con R. Puede deshabilitar la protección contra amenazas mientras instala los paquetes y funcionará correctamente.

Kristen Bystrom
fuente