2013-02-25 18 views
6

Widzę, że często używam funkcji install.package, gdy muszę wypróbować czyjś kod lub uruchomić przykład.Podawanie nazwy pakietu jako argumentu w R

Ja piszę funkcję, która instaluje i ładuje pakiet. Próbowałem następujących ale to nie działa:

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

Kiedy wpisałem inp(data.table), mówi

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

Jak mogę przekazać nazwę biblioteki jako argumentu w tym przypadku? Będę wdzięczny, jeśli ktoś może również skierowad mnie do informacji dotyczących przekazywania dowolnego obiektu jako argumentu do funkcji w R.

+1

Wystarczy popatrzeć na ten miły funkcję: https://github.com/gimoya/theBioBucket-Archives/blob/master/R/Functions/instant_pkgs.R – EDi

Odpowiedz

8

library() wyświetla błąd, ponieważ domyślnie przyjmuje jako swój pierwszy argument nazwę lub. Widzi deparse(substitute(PKG)) w tym pierwszym argumencie i, co zrozumiałe, nie może znaleźć pakietu o tej nazwie, gdy go szuka.

Ustawienie character.only=TRUE, które mówi, że library() oczekuje, że łańcuch znaków będzie pierwszym argumentem, powinno rozwiązać problem. Spróbuj tego:

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

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

myślę, że byłoby jeszcze lepiej brać 'PKG' jako ciąg znaków. Opieranie się na niestandardowej ocenie prowadzi do kodu trudnego do debugowania. – hadley

+0

@ Hadley Czy możesz zasugerować, jak to zrobić? –

+0

@ Stat-R wywołuje funkcję podobną do 'f (" plyr ")' – hadley