現在,我使用以下方法解決依賴關係:如何自動安裝所有必需的軟件包?
- 源文件。
- 如果抱怨需要包X,安裝包X.
- 轉到1
如果有大量需要的軟件包這可能會很麻煩。是否有一個命令可以確定每個需要的軟件包,然後自動安裝它們?
我有RStudio 0.98.1056和R 3.3.1。
現在,我使用以下方法解決依賴關係:如何自動安裝所有必需的軟件包?
如果有大量需要的軟件包這可能會很麻煩。是否有一個命令可以確定每個需要的軟件包,然後自動安裝它們?
我有RStudio 0.98.1056和R 3.3.1。
我使用此代碼在R腳本中查找所有必需的軟件包。
# list packages in an R file
filename <- "C:/Data/Documents/R/myFile.R"
tmp <- getParseData(parse(filename, keep.source=TRUE))
crit <- quote(token == "SYMBOL_FUNCTION_CALL")
tmp <- dplyr::filter(tmp, .dots = crit)
tmp <- unique(sort(tmp$text))
src <- paste(as.vector(sapply(tmp, find)))
outlist <- tapply(tmp,factor(src),c)
outlist
然後,您可以查看輸出並安裝那些您還沒有的輸出。不是自動的,但它可以讓你在大部分的路上!
(注意 - 我最初沒有寫這樣的代碼......發現它的地方)
編輯:@Rich斯克裏芬 - 你是正確的!我故意將一個新的函數放入腳本中,並將其列在字符(0)下。你將不得不使用?也許要安裝它。
編輯2:我研究了這個問題,並想出了這個以添加到上面的代碼。它會發現沒有連接的軟件包,如果它們在庫中,則附加它們。如果沒有,請安裝它們。
library(sos)
toInstall <- outlist$`character(0)`
for(i in 1:length(toInstall)){
newPackage<-findFn(toInstall[i])[1,4]
if (!require(newPackage,character.only = TRUE)) {
install.packages(newPackage)
library(newPackage,character.only = TRUE)
}
print(newPackage)
}
如果軟件包未安裝,這將如何工作?如果沒有找到,find'返回'character(0)',對吧?這裏有些解釋會很好。 –
構建一個包。然後,當您安裝它時,可以安裝所有依賴項。 – Roland
https://github.com/brianhigh/imp – hrbrmstr