2013-02-25 2 views
6

Я вижу, что я часто использую функцию install.package, особенно когда мне нужно попробовать чужой код или запустить пример.Передача имени пакета в качестве аргумента в R

Как написать функцию, которая устанавливает и загружает пакет. Я попытался следующие, но это не сработало:

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

Когда я напечатал inp(data.table), он говорит

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

Как передать имя библиотеки в качестве аргумента в этом случае? Буду признателен, если кто-то может также направить меня к информации, касающейся передачи любого объекта в качестве аргумента функции в R.

+1

Посмотрите на этой прекрасной функции: https://github.com/gimoya/theBioBucket-Archives/blob/master/R/Functions/instant_pkgs.R – EDi

ответ

8

library() выдает сообщение об ошибке, поскольку по умолчанию он принимает знак или имя в качестве своего первого аргумента. Он видит в этом первом аргументе и, по понятным причинам, не может найти пакет этого имени при его поиске.

Установка character.only=TRUE, которая сообщает library(), чтобы ожидать, что символьная строка будет первым аргументом, должна устранить проблему. Попробуйте это:

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

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

Я думаю, что это было бы еще лучше взять 'PKG' как строку. Опираясь на нестандартную оценку, вы получаете код, который трудно отлаживать. – hadley

+0

@hadley Можете ли вы предложить, как мне это сделать? –

+0

@ Stat-R вызывает функцию типа 'f (" plyr ")' – hadley

Смежные вопросы