我是R的新手,我花了一段时间在网络上加入示例脚本,我遇到了一堆有require(<package>)
行的脚本。我没有写install.packages(<package>)
,而是修改了脚本:
package_names <- c('caret',
'readr',
'xgboost',
'ggplot2',
'R.utils',
'gridExtra',
'lubridate',
'data.table',
'Matrix',
'plyr',
'Hmisc',
'maps',
'maptools',
'sp',
'corrplot')
for (package_name in package_names){
if (!package_name %in% rownames(installed.packages()))
install.packages(package_name)
eval(parse(text=sprintf("require(%s)",package_name)))
}
因此,如果没有安装软件包,它会在需要之前尝试安装软件包。但是,在R studio中执行此作为脚本会导致以下错误:
Error in contrib.url(repos, "source") :
trying to use CRAN without setting a mirror
Calls: <Anonymous> ... withVisible -> eval -> eval -> install.packages -> contrib.url
我没有明确地调用contrib.url
所以我真的不知道从哪里开始。
但后来我尝试复制并粘贴那些确切的行并在命令行R Studio解释器会话(repl)中运行它们,然后运行并安装/更新所有这些包完美无缺。
这让我想到了一个问题:命令行会话和导致此错误的脚本有什么区别?
答案 0 :(得分:4)
在脚本中设置CRAN镜像,从getCRANmirror()
返回的选项中设置,例如,
chooseCRANmirror(ind=1)
根据@KonradRudolph的建议,更惯用的方法可能是安装任何缺少的要求,然后再require()
所有包。
chooseCRANmirror(ind=1)
needed = package_names[!package_names %in% rownames(installed.packages())]
install.packages(needed)
ok = sapply(package_names, require, character.only=TRUE)
if (!all(ok)) {
bad = paste(package_names[!ok], collapse=", ")
stop("failed to 'require' packages: ", bad)
}