首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证安装在码头集装箱中的R包

验证安装在码头集装箱中的R包
EN

Stack Overflow用户
提问于 2017-10-24 04:27:31
回答 2查看 1.4K关注 0票数 3

是否有人有任何最佳实践来验证R包是否安装在一个码头容器中?我希望将容器设置为在CI服务上运行,并验证包是否已安装,但由于我一直在本地构建它,日志似乎很难确定安装了哪些包,哪些没有安装。最好是让一个CI服务为我这样做,或者使用一个简单的批处理脚本来验证包是否已经安装。

下面是我当前的dockerfile:

代码语言:javascript
复制
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/*
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-24 09:18:21

将其保存到类似于package_check.R的地方,然后有一个通过Rscript运行它的Docker行

代码语言:javascript
复制
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)

这将导致缺少列表的包错误,并以非零退出状态退出脚本。

票数 2
EN

Stack Overflow用户

发布于 2018-04-12 16:36:31

如果找不到要安装的软件包,我将使用以下行停止构建Docker映像:

RUN R -e 'stopifnot("devtools" %in% installed.packages()[,"Package"])'

请确保将devtools替换为要安装的包的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46902203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档