如何自动安装所有必需的包?

时间:2016-09-15 18:04:55

标签: r rstudio

现在,我使用以下方法解决依赖关系:

  1. 来源文件。
  2. 如果它抱怨需要包X,请安装包X。
  3. 转到1.
  4. 如果有大量必需的包,这可能会变得乏味。是否有一个命令可以确定每个必需的包,然后自动安装它们?

    我有RStudio 0.98.1056和R 3.3.1。

2 个答案:

答案 0 :(得分:1)

您可以使用包pacmanp_load函数查看是否已安装列出的软件包,如果缺少它们则安装它们并加载它们。这是我为r-shiny应用程序实现的示例

if(!require('pacman'))install.packages('pacman') pacman::p_load(shiny,shinyjs,httr,jsonlite,tidyverse)

答案 1 :(得分: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 Scriven - 你是对的!我故意在脚本中添加一个新函数,它列在Character(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)
  }