首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有一个函数调用库,并将包或其名称作为R中的输入。

有一个函数调用库,并将包或其名称作为R中的输入。
EN

Stack Overflow用户
提问于 2017-09-21 23:49:54
回答 2查看 83关注 0票数 2

当我启动和R脚本和我喜欢检查他们的包版本。我倾向于运行这样的东西

代码语言:javascript
运行
复制
 library(dplyr); packageVersion("dplyr")

这很好,但是我想把它缩短为一个函数,它将加载一个库,然后返回它的版本。

我希望libary函数要么接受库名的字符串,要么只接受自己键入的库名。

我试过这个功能:

代码语言:javascript
运行
复制
libver <- function(pac){
    if(!is.character(pac)){
         pac <- deparse(substitute(pac))
        }
    library(pac, character.only=TRUE)
    packageVersion(pac)
    }

但是这适用于字符串输入,但不适用于非字符串输入。

代码语言:javascript
运行
复制
 libver(MASS)

libver(质量)中的错误:找不到对象‘质量’

我可以硬编码它来接受对象而不是字符串,如下所示,

代码语言:javascript
运行
复制
libver <- function(pac){
    library( deparse(substitute(pac), character.only=TRUE)
    packageVersion(deparse(substitute(pac))
    }

但如果可以的话,我想保持这两种方法的灵活性。

EN

回答 2

Stack Overflow用户

发布于 2017-09-22 02:12:40

!is.character(pac)返回一个错误,当pac是裸包名时,没有引号。相反,您可以执行pac = as.character(substitute(pac)),它将返回一个字符串,而不管参数最初是否为字符串。

代码语言:javascript
运行
复制
libver <- function(pac) {

  pac = as.character(substitute(pac))

  library(pac, character.only=TRUE)
  packageVersion(pac)

}
票数 3
EN

Stack Overflow用户

发布于 2017-09-22 01:26:20

代码语言:javascript
运行
复制
libver <- function(pac){
  pac <- gsub("\"","",deparse(substitute(pac)))
    library(pac,character.only = T)
    packageVersion(pac)
}

libver(dplyr)
[1] ‘0.7.2’
libver("dplyr")
[1] ‘0.7.2’
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46354826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档