2013-02-25 16 views
6

Vedo che continuo a utilizzare la funzione install.package in modo particolare quando devo provare il codice di qualcun altro o eseguire un esempio.Passare il nome del pacchetto come argomento in R

Io come scrivere una funzione che installa e carica un pacchetto. Ho provato quanto segue, ma non ha funzionato:

inp <- function(PKG) 
{ 
    install.packages(deparse(substitute(PKG))) 
    library(deparse(substitute(PKG))) 
} 

Quando ho digitato inp(data.table), si dice

Error in library(deparse(substitute(PKG))) : 
    'package' must be of length 1 

Come faccio a passare nome della libreria come argomento in questo caso? Apprezzerò se qualcuno può anche indirizzarmi a informazioni relative al passaggio di qualsiasi tipo di oggetto come argomento a una funzione in R.

+1

Date un'occhiata a questa bella funzione: https://github.com/gimoya/theBioBucket-Archives/blob/master/R/Functions/instant_pkgs.R – EDi

risposta

8

library() genera un errore perché per impostazione predefinita accetta un carattere o un nome come primo argomento. Vede deparse(substitute(PKG)) in quel primo argomento, e comprensibilmente non riesce a trovare un pacchetto di quel nome quando lo cerca.

L'impostazione character.only=TRUE, che indica a library() di prevedere una stringa di caratteri come primo argomento, dovrebbe risolvere il problema. Prova questo:

f <- function(PKG) { 
    library(deparse(substitute(PKG)), character.only=TRUE) 
} 

## Try it out 
exists("ddply") 
# [1] FALSE 
f(plyr) 
exists("ddply") 
# [1] TRUE 
+0

penso che sarebbe ancora meglio prendere 'PKG' come stringa. Affidarsi a una valutazione non standard porta a un codice difficile da eseguire il debug. – hadley

+0

@hadley Puoi suggerire come faccio? –

+0

@ Stat-R chiama la funzione come 'f (" plyr ")' – hadley

Problemi correlati