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))'一次完成所有的包。兩個陳述。 –