Modifier le chemin de bibliothèque par défaut R à l'aide de .libPaths dans Rprofile.site ne fonctionne pas


206

J'utilise R sous Windows, pas en tant qu'administrateur. Lorsque j'installe un package, la commande suivante ne fonctionne pas:

> 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

Pour installer un package, je dois spécifier un emplacement de bibliothèque:

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

Pour charger un package, je dois également spécifier l'emplacement de la bibliothèque:

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

Tout cela est OK, mais je voulais voir si je pouvais ajouter C:/software/Rpackagesquelque chose au chemin de la bibliothèque et donc ne pas avoir à le taper à chaque fois.

En cherchant en ligne, j'ai trouvé qu'une façon de le faire était d'éditer le Rprofile.sitefichier et d'ajouter la ligne

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

Cependant, après avoir fait cela et démarré RStudio, voici la sortie que j'obtiens

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

La .libPathscommande que j'ai ajoutée au Rprofile.sitene semble pas avoir eu d'effet! pourquoi est-ce le cas? Ou plus important encore, comment puis-je résoudre le problème afin de pouvoir installer et charger des packages sans taper à l'emplacement de la bibliothèque?

Remarque: si je démarre RStudio, la .libPaths()commande semble fonctionner comme elle est censée

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

N'est-ce pas étrange?


Pouvez-vous développer un peu comment exactement install.packages("zoo")ne fonctionne pas? Message d'erreur, etc.?
joran

1
Je @joran ajouté le message d'erreur lorsque je tente install.packages("zoo")--- mais ce n'est pas ma vraie question qui est de savoir pourquoi .libPaths()dans Rprofile.sitene fonctionne pas.
J'aime

1
Avez-vous le même problème si vous utilisez RGui au lieu de R Studio?
Dason

6
Pourquoi les chemins de bibliothèque de R par défaut sont-ils des dossiers qui ont besoin d'autorisations d'administrateur?! Le répertoire personnel de l'utilisateur serait sûrement plus sensé
geotheory

superuser.com/questions/749283/… Modifier ~ / .Renviron R_LIBS_USER = / certains / chemin
bowen.li

Réponses:


171

J'essaie généralement de conserver tous mes packages dans une bibliothèque, mais si vous souhaitez ajouter une bibliothèque, pourquoi ne pas ajouter la nouvelle bibliothèque (qui doit déjà exister dans votre système de fichiers) au chemin de bibliothèque existant?

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

Ou (et cela fera de la bibliothèque utilisateur la première place pour mettre de nouveaux packages):

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

Ensuite, je reçois (au moins lorsque j'ai écrit cela à l'origine):

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

La .libPathsfonction est un peu différente de la plupart des autres fonctions non graphiques. Cela fonctionne par effet secondaire. Les fonctions Sys.getenvet Sys.setenvqui rapportent et modifient les variables d'environnement R ont été séparées mais .libPathspeuvent soit signaler soit modifier leur cible.

Les informations sur le processus de démarrage de R peuvent être lues sur la ?Startuppage d'aide et il existe du matériel RStudio sur: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

Dans votre cas, il semble que RStudio ne respecte pas les paramètres Rprofile.site ou peut-être les remplace en lisant un paramètre .Rprofile à partir de l'une des valeurs par défaut de RStudio. Il convient également de mentionner que le résultat de cette opération ajoute également le contenu des appels à .Libraryet .Library.site, ce qui est une autre raison pour laquelle un R hébergé RStudio (ou tout autre IDE ou réseau installé) pourrait présenter un comportement différent.

Depuis Sys.getenv()retourne l'environnement système actuel pour le processus R, vous pouvez voir la bibliothèque et d'autres chemins avec:

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

Les deux qui comptent pour le stockage et l'accès aux packages sont (désormais différents sur une boîte 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/

12
J'avais besoin d'inverser le c()vecteur pour m'assurer que les nouvelles bibliothèques vont dans le dossier personnalisé
geotheory

Excellent point. En fait, la .libPathsfonction-a le même effet par défaut. Il existe également une différence entre les systèmes d'exploitation dans la façon dont les barres obliques de fin sont traitées. (Pas OK sous Windows). D'autres options existent. Voir?.libPaths
IRTFM

5
Le nouveau chemin doit exister dans le système de fichiers, sinon il ne sera pas ajouté au chemin de la bibliothèque
jarandaf

Un autre bon point. Bien que le nom de la fonction suggère le contraire, vous pouvez d'abord vérifier file.existset continuer uniquement si le chemin d'accès n'est pas manquant.
IRTFM

3
Je l'ai fait et cela fonctionne, mais il semble que je doive changer de chemin à chaque fois que je démarre R. Est-ce la même chose pour les autres?
cyrusjan

215

La bonne solution consiste à définir la variable d'environnement R_LIBS_USERsur la valeur du chemin du fichier dans le dossier de bibliothèque souhaité, au lieu d'obtenir que RStudio reconnaisse un fichier Rprofile.site.

Pour définir la variable d'environnement R_LIBS_USERdans Windows, accédez au Panneau de configuration (Propriétés système -> Propriétés système avancées -> Variables d'environnement -> Variables utilisateur) à la valeur souhaitée (le chemin d'accès à votre dossier de bibliothèque), par exemple

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

La définition de R_LIBS_USER garantira que la bibliothèque apparaît en premier dans .libPaths (), indépendamment du démarrage direct de RStudio ou en cliquant avec le bouton droit sur un fichier et en cliquant sur "Ouvrir avec" pour démarrer RStudio.

La solution Rprofile peut fonctionner si RStudio est toujours démarré en cliquant sur le raccourci RStudio. Dans ce cas, définir le répertoire de travail par défaut sur le répertoire qui héberge votre Rprofile sera suffisant. La solution Rprofile ne fonctionne pas lorsque vous cliquez sur un fichier pour démarrer RStudio car cela éloigne le répertoire de travail du répertoire de travail par défaut.


2
Solution appropriée convenue!
felixmc

14
Certainement la bonne solution. Le seul problème est que si votre utilisateur n'est pas un administrateur (probablement le cas si vous rencontrez ce problème pour commencer), vous devez modifier vos variables d'environnement via le Panneau de configuration-> Comptes d'utilisateurs-> Comptes d'utilisateurs-> Changer mon environnement variables.
David Moye

1
Connaissez-vous (par hasard) l'équivalent en ligne de commande Linux?
Diego-MX

5
Bien sûr, définissez-les simplement comme vos variables shell (en bash, vous pouvez les modifier .bash_profileet / ou .bashrc). Voir ici: unix.stackexchange.com/questions/117467/… Pour les configurer pour la session en cours, tapez uniquement dans la consoleexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian

2
au lieu de définir la variable via le panneau de configuration, j'ai modifié la valeur par défaut de R_LIB_USER dans le fichier Rprofile. Voici la solution: j'ai trouvé une approche similaire, la solution est présentée comme une solution à cette question stackoverflow.com/questions/31707941/…
Marco

24

J'ai réussi à résoudre le problème en plaçant le code dans le .Rprofilefichier dans le répertoire de travail par défaut.

Tout d'abord, j'ai trouvé l'emplacement du répertoire de travail par défaut

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

Ensuite, j'ai utilisé un éditeur de texte pour écrire un .Rprofilefichier simple avec la ligne suivante

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

Enfin, lorsque je démarre Ret que j'exécute, .libPaths()j'obtiens la sortie souhaitée:

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

Cela ne fonctionne pas pour moi (pas plus que la solution de BondedDust). J'ai créé un fichier txt et l'ai enregistré sous .Rprofile dans le dossier de getwd ().
John

2
@John Je crois que nous disons la même chose.
J'aime

3
R lit .Rprofile de votre HOME répertoire pas de votre CURRENT répertoire.
Crt

J'ai proposé une approche similaire, la solution est présentée comme une solution à cette question stackoverflow.com/questions/31707941/…
Marco

Pour trouver le home directroy, lancez la commande r Sys.getenv("HOME")dans la console r. Je ne sais pas si vous obtenez la sortie souhaitée. Je pense que le résultat souhaité est ce que 42 a montré dans sa réponse stackoverflow.com/a/15170774/754550 . Il utilise .libPaths d'une manière légèrement différente.
miracle173


11

J'ai trouvé ce que je pense être une solution ici (merci Carl Schwarz à SFU) pour ajouter une bibliothèque personnelle qui est en permanence (vous n'avez pas à la définir à chaque session) reconnue si vous utilisez R ou Rstudio, et Rstudio la traite comme le par défaut sur ma machine Mac. Je ne l'avais pas vu explicitement présenté sur SO, j'ai donc résumé les étapes fournies, pour Windows puis pour Mac.

Pour un système d'exploitation Windows 7:

  1. Créez un répertoire sur le lecteur où vous souhaitez avoir votre bibliothèque personnelle, par exemple C: \ User \ Rlibs (ou un autre sur lequel vous avez des autorisations)

  2. Recherchez / accédez à «Modifier la variable d'environnement pour votre compte» dans la barre de recherche Windows pour modifier les paramètres du panneau de configuration

  3. Cliquez sur "Nouveau ..." au milieu de la fenêtre "Variables environnementales"

  4. Dans la fenêtre "Nouvelle variable utilisateur", saisissez R_LIBS pour le "Nom de la variable" et le chemin d'accès au répertoire de bibliothèque personnel que vous avez créé, par exemple C: \ User \ Rlibs

  5. Cliquez sur OK et vous devriez voir la paire variable / valeur dans la fenêtre Variables utilisateur

  6. Cliquez à nouveau sur OK

Maintenant, lorsque vous démarrez R (ou Rstudio) et tapez la commande .libPaths() vous devriez voir la bibliothèque personnelle que vous avez créée ainsi que la bibliothèque système R.

Pour Mac:

  1. Dans votre répertoire "Accueil" ou "nom d'utilisateur", créez un dossier appelé Rlibs

  2. Lancez l'application Terminal

  3. Type: echo "R_LIBS=~/Rlibs"> .Renvrion assurez-vous que la casse correspond.

  4. Tapez ls -apour voir la liste complète des fichiers dans le répertoire, qui devrait maintenant inclure .Renvrion

  5. Vérifiez que le fichier .Renviron a été correctement défini:more .Renviron

Lancez R / Rstudio et tapez .libPaths()et vous devriez voir le nouveau chemin vers votre bibliothèque personnelle.


8

Si vous n'avez pas de droits d'administrateur, il peut également être utile d'ouvrir le Rprofile.sitefichier situé dans \ R-3.1.0 \ etc et d'ajouter:

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

Cela évalue la .libPath()commande directement au démarrage


4

J'ai vraiment eu du mal à comprendre cela. gorkypl a donné la bonne solution ci-dessus lors de la dernière réinstallation de mon OS & Rstudio mais cette fois-ci, la définition de ma variable d'environnement n'a pas été résolue.

Désinstallé R et Rstudio, créant les répertoires C: \ R et C: \ Rstudio, puis réinstallé les deux.

Définissez la variable utilisateur R_LIBS_USER dans votre répertoire préféré (selon la réponse de gorkypl) et redémarrez votre machine pour que la variable utilisateur soit chargée. Ouvrez Rstudio, les erreurs devraient avoir disparu.

Vous pouvez également utiliser Sys.setenv()pour modifier R_LIBS_USER vers le chemin de votre bibliothèque alternative qui est plus facile et n'a pas besoin de redémarrer votre ordinateur.

Pour voir ce que R_LIBS_USER est défini sur: ?Sys.getenv()

La lecture help(Startup)est utile.


2

Si votre bibliothèque de packages par défaut a été modifiée après l'installation d'une nouvelle version de R ou par tout autre moyen, vous pouvez ajouter les deux bibliothèques pour utiliser tous les packages à l'aide des commandes ci-dessous. Obtenez le chemin de bibliothèque existant:

.libPaths()

Maintenant, définissez le chemin existant et l'ancien:

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

J'espère que ça aide.


2

il suffit de changer le dossier par défaut de vos bibliothèques R dans un répertoire sans droits d'administrateur, par exemple

.libPaths("C:/R/libs")

1

J'ai lu le readme. En cela, ils ont mentionné utiliser .libPaths () en ligne de commande pour vérifier les chemins d'accès. J'avais 2 chemins de bibliothèque plus tôt. Lorsque j'ai utilisé la commande .libpath ("C: / Program Files / R / R-3.2.4revised / library") où je voulais, cela a changé le chemin de la bibliothèque. Lorsque j'ai tapé à nouveau .libPaths () sur la ligne de commande, cela m'a montré le chemin correct. J'espère que cela t'aides


1

Sur Ubuntu, la méthode recommandée pour modifier le chemin d'accès à la bibliothèque par défaut pour un utilisateur est de définir la R_LIBS_USERvariable dans le ~/.Renvironfichier.

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron

0
getwd()
# [1] "C:/Users/..../software/My R studio"

copier le lien ci-dessus avec une double virgule inversée

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

Votre chemin par défaut changera pour l'installation des paquets


0

Si vous souhaitez modifier définitivement le chemin de votre bibliothèque (sans appeler .libPath () à chaque fois que vous entrez dans R, cela fonctionne pour moi:

  1. créez .Rprofile sous votre répertoire personnel. (~ / .Profil)

  2. tapez le .libPaths(c( .libPaths(), "your new path" )) fichier .Rprofile, enregistrez.

  3. ouvrez R (n'importe quel répertoire) et vérifiez, tapez simplement .libPaths(), vous pouvez trouver que votre chemin libaray est mis à jour!


-1

J'examinais cela parce que R avait des problèmes d'installation dans l'emplacement par défaut et plaçait simplement les packages dans le dossier temporaire. Il s'est avéré que c'était la dernière mise à jour de Mcaffee Endpoint Security qui a apparemment des problèmes avec R. Vous pouvez désactiver la protection contre les menaces pendant que vous installez les packages et cela fonctionnera correctement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.