对R库提示自动回答“是”

时间:2018-11-29 20:47:08

标签: r bash docker automation

我正在努力定义一个Docker容器,该容器可以在云环境中启动,并在我们公司的数据库上运行一些报告并自行降低运行速度,而数据科学团队(包括我自己)的参与则尽可能少。

我几乎已经完成了所有事情的启动和运行,但有一个令人烦恼的例外-报告是使用我们使用了几年的一些代码在R中完成的。我在Rocker诗句的基础上构建,并添加了需求库。

关于需求的烦人的事情(在本用例中)是,当它第一次运行时,它会询问以下内容:

ng generate component

在典型的交互式设置中,这很好,我只需键入“是”,然后按Enter键就可以了。但是,当我希望整个环境每周独立构建和运行一次时,我不想回答这个问题。我想假设是。

到目前为止,我尝试过的内容包括以下各项:

>library('needs')

Should `needs` load itself when it's... needed?   (this is recommended)

1: No
2: Yes

Selection:

没有一个可以解决问题。 needs documentation以后将以编程方式更改此设置,但在首次运行需要定义时不提供此设置:

  

建议使用该功能,以便在出现提示时自动加载功能   第一次以交互方式加载程序包。更改此设置   稍后,运行require ::: autoload(TRUE)或需要::: autoload(FALSE)进行转向   分别自动打开或关闭。

我也尝试过安静地安装需求,但也无济于事。不幸的是,我无法在Dockerfile中运行bash命令来响应“是”,或者至少我没有找到方法。

我想避免删除需求依赖项,因为这将涉及大量代码重构。

关于如何解决此问题的任何想法?

谢谢! :] -文斯

更新

解决方案有点笨拙,但是在我的Dockerfile中,我正在对该文件进行vim编辑,该文件需要分配给sysfile变量:

library('needs', quiet=TRUE)
library('needs', quietly=TRUE)
suppressMessages(library('needs', quietly=TRUE))
suppressWarnings(suppressMessages(library('needs', quietly = T)))
suppressPackageStartupMessages(library('needs', quietly=TRUE))

对于我来说是/ usr / local / lib / R / site-library / needs / extdata / promptUser,然后将其内容从“ 1”更改为“ 0”解决了我的问题。

1 个答案:

答案 0 :(得分:0)

一个更好的解决方案可能是这样做,这样它就不会首先提出问题。您可以查看它在github上的程序包加载时运行的代码:https://github.com/cran/needs/blob/master/R/needs-package.R

如果您设置了它事先检查的选项,则无需首先提出问题:

options(needs.promptUser = FALSE)