Modifica R percorso libreria predefinito utilizzando .libPaths in Rprofile.site non funziona


206

Sto eseguendo R su Windows, non come amministratore. Quando installo un pacchetto, il seguente comando non funziona:

> 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

Per installare un pacchetto, devo specificare un percorso di libreria:

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

Per caricare un pacchetto, devo anche specificare la posizione della libreria:

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

Tutto questo è OK, ma volevo vedere se potevo aggiungere C:/software/Rpackagesal percorso della libreria in qualche modo e quindi non doverlo digitare ogni volta.

Mentre cercavo online, ho scoperto che un modo per farlo è modificare il Rprofile.sitefile e aggiungere la linea

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

Tuttavia, dopo aver fatto questo e aver avviato RStudio, questo è l'output che ottengo

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

Il .libPathscomando che ho aggiunto al Rprofile.sitenon sembra aver avuto alcun effetto! Perché è così? O ancora più importante, come posso risolvere il problema in modo da poter installare e caricare i pacchetti senza digitare il percorso della libreria?

Nota: se avvio RStudio il .libPaths()comando sembra funzionare come dovrebbe

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

Non è strano?


Puoi espanderci un po 'su come esattamente install.packages("zoo")non funziona? Messaggio di errore, ecc.?
joran

1
@joran Ho aggiunto il messaggio di errore quando provo install.packages("zoo")--- ma non è la mia vera domanda, che è di circa il motivo per cui .libPaths()in Rprofile.sitenon funziona.
Mi piace scrivere il codice

1
Hai lo stesso problema se usi RGui invece di R Studio?
Dason

6
Perché i percorsi di libreria di R impostano automaticamente le cartelle che richiedono autorizzazioni di amministratore ?! Sicuramente la home directory dell'utente sarebbe più sensata
geotheory

superuser.com/questions/749283/… Modifica ~ / .Renviron R_LIBS_USER = / some / path
bowen.li

Risposte:


171

In genere cerco di conservare tutti i miei pacchetti in una libreria, ma se vuoi aggiungere una libreria perché non aggiungere la nuova libreria (che deve già esistere nel tuo filesystem) al percorso della libreria esistente?

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

Oppure (e questo renderà userLibrary il primo posto dove inserire nuovi pacchetti):

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

Poi ricevo (almeno quando l'ho scritto in origine):

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

La .libPathsfunzione è leggermente diversa dalla maggior parte delle altre funzioni non grafiche. Funziona tramite effetti collaterali. Le funzioni Sys.getenve Sys.setenvche la relazione e alterano l'ambiente R variabili sono state divise a parte, ma .libPathspossono sia segnalare o modificare il suo obiettivo.

Le informazioni sul processo di avvio di R possono essere lette alla ?Startuppagina di aiuto e il materiale RStudio è disponibile all'indirizzo: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

Nel tuo caso sembra che RStudio non rispetti le impostazioni di Rprofile.site o forse le stia ignorando leggendo un'impostazione .Rprofile da una delle impostazioni predefinite di RStudio. Va anche detto che il risultato di questa operazione acclude anche il contenuto delle chiamate a , .Librarye .Library.sitequesto è un altro motivo per cui un R ospitato R (o qualsiasi altro IDE o rete installata) ospitato potrebbe esibire un comportamento diverso.

Poiché Sys.getenv()restituisce l'ambiente di sistema corrente per il processo R, è possibile visualizzare la libreria e altri percorsi con:

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

I due che contano per l'archiviazione e l'accesso ai pacchetti sono (ora diversi su un box 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
Avevo bisogno di invertire il c()vettore per assicurarmi che le nuove librerie andassero nella cartella personalizzata
geotheory,

Punto eccellente. In effetti, la funzione .libPathsha lo stesso effetto di default. C'è anche una differenza tra i sistemi operativi nel modo in cui vengono gestite le barre finali. (Non OK su Windows). Esistono altre opzioni. Vedi?.libPaths
IRTFM,

5
Il nuovo percorso deve effettivamente esistere nel file system, altrimenti non verrà aggiunto al percorso della libreria
jarandaf,

Un altro buon punto. Sebbene il nome della funzione suggerisca diversamente, è possibile prima verificare file.existse procedere solo se il percorso non è mancante.
IRTFM,

3
L'ho fatto e funziona, ma sembra che devo cambiare il percorso ogni volta che inizio R. È lo stesso per gli altri?
cyrusjan,

215

La soluzione corretta consiste R_LIBS_USERnell'impostare la variabile d'ambiente sul valore del percorso del file nella cartella della libreria desiderata anziché far riconoscere a RStudio un file Rprofile.site.

Per impostare la variabile di ambiente R_LIBS_USERin Windows, vai al Pannello di controllo (Proprietà del sistema -> Proprietà di sistema avanzate -> Variabili di ambiente -> Variabili utente) sul valore desiderato (il percorso della cartella della libreria), ad es.

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

L'impostazione di R_LIBS_USER assicurerà che la libreria venga visualizzata per prima in .libPaths () indipendentemente dall'avvio diretto di RStudio o facendo clic con il pulsante destro del mouse su un file e "Apri con" per avviare RStudio.

La soluzione Rprofile può funzionare se RStudio è sempre avviato facendo clic sul collegamento RStudio. In questo caso, sarà sufficiente impostare la directory di lavoro predefinita sulla directory che ospita Rprofile . La soluzione Rprofile non funziona quando si fa clic su un file per avviare RStudio perché ciò modifica la directory di lavoro dalla directory di lavoro predefinita.


2
Soluzione adeguata concordata!
felixmc,

14
Sicuramente la soluzione corretta. L'unico problema è se il tuo utente non è un amministratore (probabilmente il caso se stai riscontrando questo problema per cominciare), devi cambiare le variabili di ambiente tramite Pannello di controllo-> Account utente-> Account utente-> Cambia il mio ambiente variabili.
David Moye

1
Conosci (capita) l'equivalente nella riga di comando di Linux?
Diego-MX,

5
Certo, basta impostarle come variabili della shell (in bash è possibile modificare .bash_profilee / o .bashrc). Vedi qui: unix.stackexchange.com/questions/117467/… Per impostarli per la sessione corrente, digita solo consoleexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian

2
invece di impostare la variabile tramite il pannello di controllo, ho modificato il valore predefinito di R_LIB_USER nel file Rprofile. Ecco la soluzione: ho trovato un approccio simile, la soluzione è presentata come una soluzione a questa domanda stackoverflow.com/questions/31707941/…
Marco

24

Sono riuscito a risolvere il problema inserendo il codice nel .Rprofilefile nella directory di lavoro predefinita.

Innanzitutto, ho trovato la posizione della directory di lavoro predefinita

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

Quindi ho usato un editor di testo per scrivere un semplice .Rprofilefile con la seguente riga in esso

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

Alla fine, quando avvio Re corro .libPaths()ottengo l'output desiderato:

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

Questo non funziona per me (né la soluzione di BondedDust). Ho creato un file txt e l'ho salvato come .Rprofile nella cartella da getwd ().
John,

2
@Giovanni credo che stiamo dicendo la stessa cosa.
Mi piace scrivere il codice

3
R legge .Rprofile dalla directory HOME non dalla directory CORRENTE .
Crt,

Ho escogitato un approccio simile, la soluzione è presentata come una soluzione a questa domanda stackoverflow.com/questions/31707941/…
Marco

Per trovare la home diretta, emettere il comando r Sys.getenv("HOME")nella console r. Non sono sicuro se ottieni l'output desiderato. Penso che l'output desiderato sia quello che 42 ha mostrato nella sua risposta stackoverflow.com/a/15170774/754550 . Usa .libPaths in un modo leggermente diverso.
miracle173


11

Ho trovato quella che penso sia una soluzione qui (grazie Carl Schwarz all'SFU) per l'aggiunta di una libreria personale che è permanentemente (non è necessario definirla ogni sessione) riconosciuta se si utilizza R o Rstudio e Rstudio lo considera come il predefinito sul mio computer Mac. Non l'avevo visto esposto esplicitamente su SO, quindi ho riassunto i passaggi forniti, per Windows e poi per Mac.

Per un sistema operativo Windows 7:

  1. Creare una directory sul disco in cui si desidera disporre della propria libreria personale, ad esempio C: \ User \ Rlibs (o un'altra a cui si dispone delle autorizzazioni)

  2. Cerca / vai a "Modifica variabile di ambiente per il tuo account" nella barra di ricerca di Windows per modificare le impostazioni del pannello di controllo

  3. Fai clic su "Nuovo ..." al centro della finestra "Variabili ambientali"

  4. Nella finestra "Nuova variabile utente", digitare R_LIBS come "Nome variabile" e il percorso della directory della libreria personale creata, ad esempio C: \ User \ Rlibs

  5. Fai clic su OK e dovresti vedere la coppia Variabile / Valore nella finestra Variabili utente

  6. Fai di nuovo clic su OK

Ora quando avvii R (o Rstudio) e digiti il ​​comando .libPaths()dovresti vedere la libreria personale che hai creato e la libreria di sistema R.

Per Mac:

  1. Nella tua directory "Home" o "nome utente" crea una cartella chiamata Rlibs

  2. Avvia l'applicazione Terminale

  3. Digitare: echo "R_LIBS=~/Rlibs"> .Renvrionassicurarsi che le maiuscole / minuscole corrispondano.

  4. Digitare ls -aper visualizzare l'elenco completo dei file nella directory, che ora dovrebbe includere .Renvrion

  5. Verificare che il file .Renviron sia stato impostato correttamente:more .Renviron

Avvia R / Rstudio e digita .libPaths()e dovresti vedere il nuovo percorso della tua libreria personale.


8

Se non si dispone dei diritti di amministratore, può anche essere utile aprire il Rprofile.sitefile che si trova in \ R-3.1.0 \ etc e aggiungere:

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

Questo valuta il .libPath()comando direttamente all'avvio


4

Ho avuto davvero problemi a capirlo. gorkypl ha fornito la soluzione corretta sopra l'ultima volta che ho reinstallato il mio sistema operativo e Rstudio, ma questa volta l'impostazione della mia variabile di ambiente non è stata risolta.

Disinstallato R e Rstudio, creando le directory C: \ R e C: \ Rstudio, quindi reinstallati entrambi.

Definire la variabile utente R_LIBS_USER nella directory preferita (secondo la risposta di gorkypl) e riavviare il computer per il caricamento della variabile utente. Apri Rstudio, gli errori dovrebbero essere spariti.

Puoi anche utilizzare Sys.setenv()per modificare R_LIBS_USER nel percorso della tua libreria alternativa che è più semplice e non è necessario riavviare il computer.

Per vedere a cosa R_LIBS_USER è impostato: ?Sys.getenv()

La lettura help(Startup)è utile.


2

Se la libreria dei pacchetti predefinita è stata modificata dopo l'installazione di una nuova versione di R o in qualsiasi altro modo, è possibile aggiungere entrambe le librerie per utilizzare tutti i pacchetti con l'aiuto dei comandi seguenti. Ottieni il percorso della libreria esistente:

.libPaths()

Ora imposta il percorso esistente e quello precedente:

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

Spero che sia d'aiuto.


2

basta cambiare la cartella predefinita per le librerie R in una directory senza diritti di amministratore, ad es

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

1

Ho letto il readme. In quello che hanno citato usa .libPaths () nella riga di comando per controllare quali percorsi ci sono. Ho avuto 2 percorsi di libreria prima. Quando ho usato il comando .libpath ("C: / Program Files / R / R-3.2.4revised / library") dove volevo, ha cambiato il percorso della libreria. Quando ho digitato di nuovo .libPaths () dalla riga di comando, mi ha mostrato il percorso corretto. Spero che questo ti aiuti


1

Su Ubuntu, il modo consigliato di modificare il percorso di libreria predefinito per un utente è impostare la R_LIBS_USERvariabile nel ~/.Renvironfile.

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

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

copia il link sopra con una virgola doppia invertita

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

Il tuo percorso predefinito cambierà per l'installazione di pakages


0

Se vuoi cambiare il percorso della tua libreria in modo permanente (senza chiamare .libPath () ogni volta che entri in R, questo funziona per me:

  1. crea .Rprofile nella tua home directory. (~ / .Rprofile)

  2. digitare il .libPaths(c( .libPaths(), "your new path" )) file .Rprofile, salvare.

  3. apri R (qualsiasi directory) e controlla, basta digitare .libPaths(), puoi trovare il tuo percorso libaray aggiornato!


-1

Stavo esaminando questo perché R stava riscontrando problemi con l'installazione nella posizione predefinita e invece stava semplicemente inserendo i pacchetti nella cartella temporanea. Si è rivelato essere l'ultimo aggiornamento per Mcaffee Endpoint Security che a quanto pare ha problemi con R. È possibile disabilitare la protezione dalle minacce mentre si installano i pacchetti e funzionerà correttamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.