6

我发现自己经常使用该install.package功能,尤其是当我必须尝试其他人的代码或运行示例时。

我正在编写一个安装和加载包的函数。我尝试了以下但没有奏效:

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.

4

1 回答 1

10

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

Setting 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
于 2013-02-25T20:54:22.800 回答