R 控制台与 R 脚本环境的区别; installed.packages() 错误
Differences of R console vs. R script environment; error with installed.packages()
我是 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) 中,瞧,它 运行 和 installed/updated 所有这些包都完美无缺。
这让我想到了一个问题:导致此错误的命令行会话和脚本之间有什么区别?
在脚本中设置 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)
}
我是 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) 中,瞧,它 运行 和 installed/updated 所有这些包都完美无缺。
这让我想到了一个问题:导致此错误的命令行会话和脚本之间有什么区别?
在脚本中设置 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)
}