2016-09-15 111 views
0

現在,我使用以下方法解決依賴關係:如何自動安裝所有必需的軟件包?

  1. 源文件。
  2. 如果抱怨需要包X,安裝包X.
  3. 轉到1

如果有大量需要的軟件包這可能會很麻煩。是否有一個命令可以確定每個需要的軟件包,然後自動安裝它們?

我有RStudio 0.98.1056和R 3.3.1。

+7

構建一個包。然後,當您安裝它時,可以安裝所有依賴項。 – Roland

+0

https://github.com/brianhigh/imp – hrbrmstr

回答

0

我使用此代碼在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) 
    } 
+2

如果軟件包未安裝,這將如何工作?如果沒有找到,find'返回'character(0)',對吧?這裏有些解釋會很好。 –