2013-02-25 41 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 2013-02-25 20:53:21

回答

8

library()正在抛出一个错误,因为它默认接受一个字符一个名字作为它的第一个参数。它在第一个参数中看到deparse(substitute(PKG)),可以理解的是,在查找它时找不到该名称的包。

设置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 2013-02-26 13:49:20

+0

@hadley你能建议我该怎么做? – 2013-02-26 14:46:29

+0

@ Stat-R调用类似'f(“plyr”)的函数' – hadley 2013-02-26 15:31:07

相关问题