【问题标题】:Automatically respond "Yes" to R library prompt对 R 库提示自动响应“是”
【发布时间】:2019-05-02 00:09:46
【问题描述】:

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

我几乎已经完成了一切的启动和运行,除了一个令人恼火的异常——报告是在 R 中使用我们已经使用了几年的一些代码完成的。我在 Rocker verse 的基础上进行构建,并且正在添加需求库。

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

>library('needs')

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

1: No
2: Yes

Selection:

在典型的交互式设置中,这很好,我只需输入“是”并按 Enter 即可。但是,当我希望整个环境每周自行构建和运行一次时,我不想回答这个问题。我希望它假设是。

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

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

这些都不能解决问题。 needs documentation 提供了以后以编程方式更改此设置,但不适用于定义第一次运行需要时的设置:

推荐使用是让函数在提示时自动加载 第一次以交互方式加载包。更改此设置 稍后,运行 needs:::autoload(TRUE) 或 needs:::autoload(FALSE) 转 分别开启或关闭自动加载。

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

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

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

谢谢! :] -文斯

更新

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

sysfile <- system.file("extdata", "promptUser", package = "needs")

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

【问题讨论】:

  • 在 bash 中,您是否尝试过类似 command &lt;&lt;&lt; 'Yes' 之类的东西?
  • 嗨 cdarke,感谢您在这里的帮助。我已经尝试过了,不幸的是它不起作用,因为它有效地启动了一个新的 bash 命令,而不是在 R shell 中将它作为 R 命令运行。如果我尝试添加类似 R -e "Yes" 的内容,它只会启动一个新的 R shell 并失败,因为 Yes 本身不是有效的 R 命令。 ://

标签: r bash docker automation


【解决方案1】:

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

如果您事先设置了它检查的选项,那么它不需要首先提出问题:

options(needs.promptUser = FALSE)

【讨论】:

  • 感谢您的建议,达森!事实上,我确实尝试过这个,并得到了这个错误: > options("needs.promptUser") = FALSE 选项中的错误("needs.promptUser") = FALSE : 分配目标扩展到非语言对象如果我运行 > 选项(“needs.promptUser”),然后我得到这个输出: $needs.promptUser NULL
  • 实际上,我现在看到我设置的选项不正确!它以您共享的形式成功运行,但仍需要提示我这个问题。 :/ 似乎需要在检查它之前立即明确设置该选项的值。
  • 你是对的。我之前没有注意到那部分。也许您可以在加载需求之前运行覆盖 sysfile 的部分。 (在手机上,所以我无法测试)
  • 谢谢 Dason,我会在明天回到办公室时试一试并报告。 :]
  • 嗨,Dason,我能够打开需要分配给“sysfile”变量的文件(在 sysfile
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2021-02-12
  • 2017-06-26
相关资源
最近更新 更多