優雅的方法來檢查丟失的包并安裝它們?這些天我似乎與共同作者分享了很多代碼。他們中的許多人都是初級/中級R用戶,并沒有意識到他們必須安裝他們尚未擁有的軟件包。是否有一種優雅的方式來調用installed.packages(),將其與我正在加載的那些進行比較并在安裝時如果丟失?
3 回答

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
是。如果您有包列表,請將其與輸出進行比較installed.packages()[,"Package"]并安裝缺少的包。像這樣的東西:
list.of.packages <- c("ggplot2", "Rcpp")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
除此以外:
如果您將代碼放在一個包中并使它們成為依賴項,那么在安裝包時它們將自動安裝。

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
Dason K.和我有pacman包可以做得很好。p_load
包中的功能就是這樣做的。第一行是為了確保安裝pacman。
if (!require("pacman")) install.packages("pacman")pacman::p_load(package1, package2, package_n)

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
你可以使用以下的返回值require
:
if(!require(somepackage)){ install.packages("somepackage") library(somepackage)}
我library
在安裝后使用,因為如果安裝不成功或由于某些其他原因無法加載包,它將拋出異常。您可以使其更加強大和可重用:
dynamic_require <- function(package){ if(eval(parse(text=paste("require(",package,")")))) return True install.packages(package) return eval(parse(text=paste("require(",package,")")))}
這種方法的缺點是你必須在引號中傳遞包名,而不是真實的require
。
- 3 回答
- 0 關注
- 636 瀏覽
添加回答
舉報
0/150
提交
取消