Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何自动安装所有必需的软件包?_R_Rstudio - Fatal编程技术网

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

R 如何自动安装所有必需的软件包?,r,rstudio,R,Rstudio,现在,我使用以下方法解决依赖关系: 源文件 如果它抱怨需要程序包X,请安装程序包X 转到1 如果有大量必需的包,这可能会变得单调乏味。是否有一个命令可以确定每个必需的包,然后自动安装它们 我有RStudio 0.98.1056和r3.3.1。我使用此代码在R脚本中查找所有必要的包 # list packages in an R file filename <- "C:/Data/Documents/R/myFile.R" tmp <- getParseData(parse(

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

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


    我有RStudio 0.98.1056和r3.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
    
    #在R文件中列出包
    文件名您可以使用软件包。
    p\u load
    函数查看列出的软件包是否已安装,如果缺少则安装,然后再加载。下面是我的r-Shining应用程序示例实现

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

    构建一个包。然后,当您安装它时,所有依赖项都可以安装。如果没有安装软件包,这将如何工作
    find
    返回
    字符(0)
    如果未找到,对吗?这里最好有一些解释。
     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)
      }