【问题标题】:Passing package name as argument in R在 R 中将包名称作为参数传递
【发布时间】:2013-02-25 20:46:21
【问题描述】:

我发现自己经常使用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 中的函数的信息,我将不胜感激。

【问题讨论】:

标签: r function


【解决方案1】:

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

【讨论】:

  • 我认为将PKG 作为字符串会更好。依赖非标准评估导致代码难以调试。
  • @hadley 你能建议我怎么做吗?
  • @Stat-R 调用类似f("plyr")的函数
猜你喜欢
  • 2014-06-04
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 2014-10-17
  • 2014-02-09
  • 2013-03-03
相关资源
最近更新 更多