所以我的目标是创建一个首先尝试加载包的函数。如果无法加载,则会尝试安装然后加载它。我在某处看到了这种类型的代码,我在几个函数中使用它,我总是在函数中指定必要的包。我认为这将是一个很好的工具,可以概括为一个函数。有这么多包我经常忘记我已经安装的。
问题是在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")
答案 0 :(得分: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