有没有人有验证R软件包是否已安装到Docker容器的最佳实践?我想将我的容器设置为在CI服务上运行,并验证是否安装了我的软件包,但是由于我是在本地构建它的,因此日志似乎很难确定安装了哪些软件包,哪些没有安装。最好是让CI服务为我这样做,或者使用简单的批处理脚本来验证软件包是否已安装。
以下是我当前的dockerfile:
FROM rocker/tidyverse:latest
RUN mkdir -p $HOME/.R
COPY R/Makevars /root/.R/Makevars
RUN apt-get update -qq \
&& apt-get -y --no-install-recommends install \
liblzma-dev \
libbz2-dev \
ed \
clang \
ccache \
default-jdk \
default-jre \
&& R CMD javareconf \
&& install2.r --error \
ggstance ggrepel \
rstan shinystan rstanarm \
###My pkgs
tidytext janitor corrr officer devtools pacman
tidyquant timetk tibbletime sweep broom prophet \
forecast prophet lime sparklyr rsparkling \
formattable httr rvest xml2 jsonlite \
textclean ggthemes naniar \
&& Rscript -e 'devtools::install_github(c("hadley/multidplyr","jeremystan/tidyjson","ropenscilabs/skimr"))' \
&& rm -rf /tmp/downloaded_packages/ /tmp/*.rds \
&& rm -rf /var/lib/apt/lists/*
保存到类似的东西package_check.R
,然后有一个Docker行通过Rscript
以下方式运行它:
c("tidytext", "janitor", "corrr", "officer", "devtools", "pacman", "tidyquant",
"timetk", "tibbletime", "sweep", "broom", "prophet", "forecast", "prophet",
"lime", "sparklyr", "rsparkling", "formattable", "httr", "rvest", "xml2",
"jsonlite", "textclean", "ggthemes", "naniar") -> chk_pkgs
suppressPackageStartupMessages(
sapply(chk_pkgs, require, character.only=TRUE, quietly=FALSE, warn.conflicts=FALSE)
) -> ret
missing_pkgs <- sort(names(which(ret == FALSE)))
if (length(missing_pkgs) > 0) {
warning("The following packages are not installed: %s",
paste0(sprintf(" - %s", missing_pkgs), collapse="\n"))
}
quit(save=FALSE, status=length(names) == 0, runLast = FALSE)
这将为您提供缺少列表的缺少包错误,并以非零退出状态退出脚本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句