有一个函数调用库并将一个包或它的名称作为R

时间:2017-09-21 23:49:55

标签: r function packages

当我启动和R脚本时,我想检查他们的包版本。我倾向于运行类似

的东西
 library(dplyr); packageVersion("dplyr")

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

我希望libary函数接受一个库名的字符串,或者只接受自己键入的库名。

我试过这个功能:

libver <- function(pac){
    if(!is.character(pac)){
         pac <- deparse(substitute(pac))
        }
    library(pac, character.only=TRUE)
    packageVersion(pac)
    }

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

 libver(MASS)
  

libver(MASS)出错:对象&#39; MASS&#39;找不到

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

libver <- function(pac){
    library( deparse(substitute(pac), character.only=TRUE)
    packageVersion(deparse(substitute(pac))
    }

但是如果可以的话,我希望保持灵活性。

2 个答案:

答案 0 :(得分:3)

!is.character(pac)是裸包名称而没有引号时,

pac会返回错误。相反,您可以执行将返回字符串的pac = as.character(substitute(pac)),无论该参数最初是否为字符串。

libver <- function(pac) {

  pac = as.character(substitute(pac))

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

}

答案 1 :(得分:2)

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’