有没有类似于R的requirements.txt文件的东西?

53
在Python中,你可以有一个名为requirements.txt的文件,你可以将使用的软件包列表存储到该文件中,当其他人想要运行你的程序并需要安装依赖时,他们只需执行pip install -r requirements.txt
我认为这在将R脚本部署到生产环境中时非常有帮助。那么在R中是否也有类似的功能呢?如果没有这样的功能,我该如何复制它呢?

1
无法确定您在问什么(我还不是投票者之一)。部署通常使用软件包完成。可能是软件包DESCRIPTION文件中的内容或您的.Rprofile文件中的内容。 - IRTFM
2
尝试使用 packrat - hrbrmstr
@MrFlick,requirements.txt 的功能是将项目所需的所有软件包存储在一个文件中,以便您可以下载它们并避免运行脚本时出现“Error in library(xxx):there is no package called ‘xxx’”的错误。 - Giacomo
1
我尝试为R创建类似于requirements.txt的东西:https://gist.github.com/cannin/6b8c68e7db19c4902459 - cannin
我想知道Python或者pip是否提供了requirements.txt的功能?我认为应该是后者。 - ytu
1个回答

12
根据评论,您可能希望考虑构建一个包,并在DESCRIPTION文件中包含要求。如果您想要将.R脚本“投入生产”,则可以在开头放置一个函数来确保所需的软件包已安装。以下是我自己包中类似的内容,我可以在任何脚本的开头调用pkgLoad(<list of packages>)以确保已安装并加载软件包。我包括了我的喜爱软件包的列表,这样一次pkgLoad()的调用即可安装和加载所有通常使用的软件包:
pkgLoad <- function( packages = "favourites" ) {

    if( length( packages ) == 1L && packages == "favourites" ) {
        packages <- c( "data.table", "chron", "plyr", "dplyr", "shiny",
                       "shinyjs", "parallel", "devtools", "doMC", "utils",
                       "stats", "microbenchmark", "ggplot2", "readxl",
                       "feather", "googlesheets", "readr", "DT", "knitr",
                       "rmarkdown", "Rcpp"
        )
    }

    packagecheck <- match( packages, utils::installed.packages()[,1] )

    packagestoinstall <- packages[ is.na( packagecheck ) ]

    if( length( packagestoinstall ) > 0L ) {
        utils::install.packages( packagestoinstall,
                             repos = "http://cran.csiro.au"
        )
    } else {
        print( "All requested packages already installed" )
    }

    for( package in packages ) {
        suppressPackageStartupMessages(
            library( package, character.only = TRUE, quietly = TRUE )
        )
    }

}

请注意,我已将我最喜欢的CRAN镜像嵌入到函数中,请确保根据自己的需求进行更改。


2
典型的美国风格,我把澳大利亚的域名扩展名和奥地利混淆了,想知道为什么你没有从最近的镜像下载,特别是因为它是CRAN的中央镜像。 - shayaa
2
应该用devtools::install_version代替install.packages,因为通过requirements.txt不仅可以安装必要的软件包,还可以安装特定版本的软件包。 - ytu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接