在R中将包名称作为参数传递

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 函数,我将不胜感激。


1
请查看这个好用的函数:https://github.com/gimoya/theBioBucket-Archives/blob/master/R/Functions/instant_pkgs.R - EDi
1个回答

10

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
@hadley,您能否建议我如何做到这一点? - Stat-R
@Stat-R 调用函数的方式是 f("plyr") - hadley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接