gpt4 book ai didi

r - 如何通过docker以并行方式安装R包?

转载 作者:行者123 更新时间:2023-12-05 02:47:03 26 4
gpt4 key购买 nike

我正在通过 docker 文件从 CRAN 安装几个 R 包。下面是我的 docker 文件:

FROM r-base:4.0.2
RUN apt-get update \
&& apt-get install -y --auto-remove \
build-essential \
libcurl4-openssl-dev \
libpq-dev \
libssl-dev \
libxml2-dev \
&& R -e "system.time(install.packages(c('shiny', 'rmarkdown', 'Hmisc', 'rjson', 'caret','DBI', 'RPostgres','curl', 'httr', 'xml2', 'aws.s3'), repos='https://cloud.r-project.org/'))"
RUN mkdir /shinyapp
COPY . /shinyapp
EXPOSE 5000
CMD ["R", "-e", "shiny::runApp('/shinyapp/src/shiny', port = 5000, host = '0.0.0.0')"]

docker 构建过程花费了太多时间(25 到 30 分钟)。以下是构建完成后的执行时间详细信息。

user   system  elapsed 
1306.268 232.438 1361.374

上面的Dockerfile有什么办法可以优化吗?有什么方法可以并行安装包吗?

注意:我也试过rocker/r-base,但安装速度没有任何好转。

最佳答案

‘pak’并行执行包下载和安装。

不幸的是 current CRAN version of ‘pak’ (0.1.2.1) 可以说是坏了:它有的依赖。相比之下,GitHub 上的开发版本没有外部依赖,这是应该的。所以我们需要安装那个。

因此您可以按如下方式更改 Dockerfile:


&& Rscript -e "install.packages('pak', repos = 'https://r-lib.github.io/p/pak/dev/'); pak::pkg_install(c('shiny', 'rmarkdown', 'Hmisc', 'rjson', 'caret','DBI', 'RPostgres','curl', 'httr', 'xml2', 'aws.s3'))"

但是,坦率地说,这很难读。更好的方法是使用 ARGENV 提供要安装的包(这与我们是否使用“pak”来安装包无关):

FROM r-base:4.0.2

ARG PKGS="shiny, rmarkdown, Hmisc, rjson, caret, DBI, RPostgres, curl, httr, xml2, aws.s3"

RUN apt-get update \
&& apt-get install -y --auto-remove \
build-essential \
libcurl4-openssl-dev \
libpq-dev \
libssl-dev \
libxml2-dev

RUN Rscript -e 'install.packages("pak", repos = "https://r-lib.github.io/p/pak/dev/")' \
&& echo "$PKGS" \
| Rscript -e 'pak::pkg_install(strsplit(readLines("stdin"), ", ?")[[1L]])'

RUN mkdir /shinyapp
COPY . /shinyapp

EXPOSE 5000
CMD ["Rscript", "-e", "shiny::runApp('/shinyapp/src/shiny', port = 5000, host = '0.0.0.0')"]

另请注意,不应通过 R 二进制文件调用 R 以用于脚本用途——这就是 Rscript 的用途。除其他外,它可以更好地处理标准输出。

关于r - 如何通过docker以并行方式安装R包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65216178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com