包装检查和逻辑;元素

时间:2019-08-20 17:30:58

标签: r

这可能是此问题的另一次重复,但我们继续。

我正在构建.Rprofile软件包检查器。对于发送给非技术人员的r脚本,我也使用类似的脚本。它检查软件包,如果不存在则安装它们,如果存在则加载它们。我在软件包检查中发现了大量资源,但是由于某种原因,一旦您开始将这些检查粘贴到函数中或.Rprofile,事情就会变得很奇怪。

如果有人可以告诉我此功能出了什么问题,那将是极大的帮助。我真的为此挠头了。

startup_packagecheck<-function(pkg){
  library("utils")
  if(!is.element(pkg, installed.packages()))
    return(TRUE)
}
startup_packagecheck(pkg=MASS)

1 个答案:

答案 0 :(得分:0)

在问题中,传递给函数的对象名为MASS。该对象应该存在于.GlobalEnv中,并且与字符串"MASS"无关,需要让is.element看到它是否是installed.packages返回的字符向量的元素。

解决问题的方法是将字符串传递给函数。

startup_packagecheck<-function(pkg){
  !is.element(pkg, utils::installed.packages())
}

startup_packagecheck(pkg = MASS)
#[1] FALSE

Packs <- c("MASS", "ggplot2")
startup_packagecheck(pkg = Packs)
#[1] FALSE FALSE