2013-02-15 32 views
22

A volte su Stack Overflow, c'è una domanda relativa a un pacchetto che non è installato sul mio sistema e che non ho intenzione di riutilizzare in seguito.Installa temporaneamente un pacchetto R, solo per la sessione corrente

Se installo il pacchetto con install.packages(), verrà inserito in una delle mie librerie di installazione R, quindi richiederà uno spazio di archiviazione e verrà aggiornato ogni volta che eseguo update.packages().

C'è un modo per installare un pacchetto solo per la sessione R corrente?

risposta

22

È possibile installare un pacchetto temporaneamente con la seguente funzione:

tmp.install.packages <- function(pack, dependencies=TRUE, ...) { 
    path <- tempdir() 
    ## Add 'path' to .libPaths, and be sure that it is not 
    ## at the first position, otherwise any other package during 
    ## this session would be installed into 'path' 
    firstpath <- .libPaths()[1] 
    .libPaths(c(firstpath, path)) 
    install.packages(pack, dependencies=dependencies, lib=path, ...) 
} 

che si può usare semplicemente in questo modo:

tmp.install.packages("pkgname") 

Il pacchetto è installato in una directory temporanea, e le sue file dovrebbe essere cancellato al prossimo riavvio del sistema (almeno sui sistemi linux).

+2

(+1) lo trovo utile. Vorrei che tu lo avessi postato prima di installare un milione di pacchetti! :) – Arun

+0

@Arun contento che tu abbia trovato utile questo, mi è sembrato un po 'strano rispondere alla mia stessa domanda ... – juba

+6

@juba perché? È addirittura incoraggiato. Forse hai bisogno di controllare se il pacchetto è già installato ... – agstudy

8

Un'altra soluzione per questo problema è devmode da devtools. Devmode ti consente di installare pacchetti in un repository dev in modo che gli altri tuoi pacchetti non vengano modificati se installi le versioni di sviluppo. Ad esempio:

library(devtools) 
devmode() 
install_github('ggplot2', 'hadley') 
devmode() 

Noterai che la tua versione non è cambiata.

+0

sì, ma i pacchetti rimangono installati nella dev_mode, iiuc? – Arun

+0

+1 molto utile, poiché la funzione che ho fornito non consente di installare temporaneamente con le funzioni 'devtools' come' install_github'. Grazie ! – juba

+0

@Arun Sì, lo fanno.Ma sono separati dai tuoi pacchetti regolari. –

8

pacman su questioni attinenti alla gestione dei pacchetti come questo:

library(pacman) 

Ora è possibile utilizzare:

p_load("pkgname") #installs or loads package if already installed 
#at end of session: 
p_delete("pkgname") #deletes package from lib 

Questo è un modo rapido per l'installazione nella directory e quindi eliminarlo alla fine (non è realmente un'installazione temporanea)

+3

Ma ora hai un pacchetto extra, 'pacman' sul tuo sistema :-) –

+0

Bello, non sapeva di' pacman'. – juba

4

Come aggiunta alla risposta di Tyler è stata recentemente aggiunta la funzione p_temp allo pacman pacchetto che fa esattamente quello che la domanda richiede.

library(pacman) 
p_temp(pkgname) # or p_temp("pkgname") either work... 

Questo installerà temporaneamente il pacchetto e qualsiasi dipendenza.

Disclosure: Tyler e io sono co-autori del pacchetto pacman ...

+1

Forse sono solo io, ma penso che una punta di cappello (anche se è il cappello sul cane nel tuo avatar) dovrebbe andare a @juba nella documentazione di 'p_temp' per le * somiglianze * tra la tua funzione e la sua. Se no, almeno un link nei riferimenti a questa domanda. – A5C1D2H2I1M1N2O1R2T1

+1

@AnandaMahto infatti. Ce l'ho nella mia versione locale ma non l'ho ancora spinto a GitHub. – Dason

Problemi correlati