r - 确定 R 中 docker 映像所需的软件包
问题描述
我有一个非常简单的脚本:
library(datasets)
library(caret)
data(iris)
index <- createDataPartition(iris$Species, p=0.80, list=FALSE)
testset <- iris[-index,]
trainset <- iris[index,]
model = train(Species ~ .,
data=trainset,
method="rpart",
trControl = trainControl(method = "cv"))
正如您可能知道的那样,该脚本将 rpart 分类模型拟合到 iris 数据集。所以我知道我的 docker 图像至少需要插入符号(或者可能只是 rpart,因为 docker 用于对模型进行评分?)。我认为 R 还单独基于插入符语句加载了一些其他包。因此,为了尝试确定我的 docker 映像需要哪些包,我想我会这样做:
x <- .packages(TRUE)
x
不幸的是,这给了我一个(太?)很长的包列表,但也许它们都是运行这个脚本所必需的(我理解插入符号构建在许多包之上)。请问获得所需软件包的明确列表的最佳做法是什么?
PS:
顺便说一句,数据集是 R 基础的一部分吗?
解决方案
我的建议是创建一个新的 R 项目并使用该renv
包进行依赖管理。请参阅有关如何设置的文档。在 RStudio 中创建新项目时,您甚至可以选择“将此项目使用 renv”选项。
在构建 Docker 映像之前,renv::snapshot()
最后运行一次,它将所需的依赖项保存到您的renv.lock
文件中。
然后,在您的 Dockerfile 中,安装renv
,将文件复制renv.lock
到容器中,以及renv::restore()
构建映像时的依赖项。由于renv
旨在用于交互式使用,因此您必须为无监督安装设置一些特殊参数——将其作为样板起点:
# Copy renv.lock file
COPY ./renv.lock /renv.lock
# Install R packages
RUN R -e "install.packages('renv')"
RUN R -e "renv::consent(provided = TRUE)"
RUN R -e "renv::restore(prompt = FALSE)"
您还可以查看有关在Docker 中使用 renv的专用文档。
这应该安装脚本所需的所有必要依赖项。
推荐阅读
- java - 无需编辑 Supertypes java 文件即可使 Jackson Subtypes 可扩展
- batch-file - 获取最后修改的文件
- python - dlib 在 raspbian 上失败
- java - 使用扩展类的多个活动的 SharedPreferences
- python - 将 jupyter notebook 单元的输出打印到文件中
- python - 如何在python中使用for循环和数组来计算错误传播
- python - 在“n”个句号后停止捕获
- php - 重定向到 index.php 但未在搜索栏中显示“index.php”
- sql - 将 ISNULL 函数与 LEAD 函数一起使用:遇到问题
- c++ - Is the same way write this two type of struct?