0

所以我的目标是创建一个首先尝试加载包的函数。如果无法加载,它将尝试安装它然后加载它。我在某处看到了这种类型的代码,并在我的几个函数中使用了它,我总是在函数中指定必要的包。我认为这将是一个很好的工具来概括为一个函数。有太多的软件包,我经常忘记我已经安装了什么。

问题在于,在 lib 和 lib2 中,它传递的是对象 ( "package") 的名称,而不是对象 () 内容的名称"SpatialPack"。我尝试了一些方法,例如在对象 ( "package[1]") 中指定位置,但没有任何效果。

让它调用对象的内容而不是对象的名称的任何帮助都会很棒。谢谢!

  get.package<-function(package){
  lib<-require(package)
  if(lib==TRUE)
  {
    print(paste(c(package,"Package successfully loaded")))
  }
 if(lib==FALSE)
 {
 print(paste(c("Attempting to install and load",package,"Package")))
 install.packages(package)
 lib2<-require(package)
 if (lib2==TRUE)
 {
 print(paste(c(package,"Package successfully installed and loaded")))
 }
 else print(paste(c(package,"Package unable to be installed")))

 }
 }

 get.package("SpatialPack")
4

1 回答 1

2

为了方便起见,两者都require进行library非标准评估,但您可以使用参数来抑制它。尝试将您的代码更改为:

 require(package,  character.only = TRUE)

示范:

> strangeName <- "sets"
> require(strangeName, character.only=TRUE)
Loading required package: sets

Attaching package: ‘sets’

The following object is masked from ‘package:data.table’:

    set
于 2014-03-23T23:13:04.347 回答