1
我是R新手,我已经花了一段时间在Web上的脚本示例,我碰到一个脚本,有一堆require(<package>)
行。而不是写install.packages(<package>)
,我修改剧本这样:R控制台与R脚本环境的区别;错误与installed.packages()
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演播室:
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)中运行它们,然后运行并完美地安装/更新所有这些软件包。
这引出了一个问题:命令行会话和导致此错误的脚本有什么区别?
你是如何运行脚本的? –
我相信** pacman **包的'p_load'函数会为您处理所有这些,包括cran回购集。它会使代码更加简洁和可读。 –
顺便说一下,通过使用'install.packages(setdiff(package_names,rownames(installed.packages())))'而不是循环,可以将代码制作成两行更具惯用的R代码。要用变量调用'require'(更好:'library' - 不需要'require'!),使用'require(var,character.only = TRUE)'。你可以使用'invisible(Map(library,package_names,character.only = TRUE))'一次完成所有的包。两个陈述。 –