问题标签 [callr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
43 浏览

r - R callr 不同的 R 版本

是否可以callr::r使用与当前使用的版本不同的 R 版本运行?一个示例是从 R3.5.1 调用以下内容,但使用 R3.4.1 执行它。

它应该返回类似“3.4.1”的内容。我已经研究过了callr:::setup_r_binary_and_args,但它需要当前的 R 版本。

0 投票
1 回答
352 浏览

r - 是否可以为 RMarkdown 禁用`callr`?

尝试为 {disk.frame} 构建小插图时,我不断收到错误消息。我认为这是由于使用 NSE 的 {callr} 的错误行为。

是否可以不将 {callr} 与 RMarkdown 一起使用?我认为 {callr} 在后台创建了一个新的 R 会话,但如果我只是使用同一个会话来构建 Markdown,那么我应该没问题。但是我在 Rmarkdown 文档中找不到可以禁用 {callr} 的位置。

更新

这是您可以尝试的代码

0 投票
0 回答
96 浏览

r - 嵌套后台/并行进程的生成失败

我正在尝试构建一个在AWS ECS上运行并涉及包{future}{future.callr}{furrr}的 dockerized R 微服务(因此隐含{callr}{processx}

当我使用限制为1 个 CPU650 MB内存的 docker 容器进行本地测试时(与我的客户的舞台设置相匹配;生产有1500 MB4 个 CPU),一切正常。

但是,在实际的 AWS 实例上,我收到以下错误:

错误一:

错误2:

我在这里完全超出了我的深度,谁能给我一个提示,告诉我发生了什么和/或我该如何解决这个问题?

在这个问题上提供一个代表有点困难,但这里是一般设置的主要要点:

确保后台进程

处理两个操作“同时”发生的包装函数,其中每个操作需要在 3 个实体上并行化(x例如长度为 3)

每个并行化周期中要执行的实际功能

0 投票
1 回答
66 浏览

r - 带有 invalidateLater() 的简单闪亮应用程序错误地丢弃了持久后台进程

我正在尝试编写一个最小的 Shiny 应用程序来维护一个持久的外部后台进程。由于特定于全尺寸用例的原因,我在文本文件中跟踪 PID 而不是仅使用processx句柄。当我启动应用程序时,它看起来像这样:

在此处输入图像描述

当我按下“开始”按钮时,应用程序会创建一个后台进程并将 PID 记录在一个文本文件中。invalidateLater()重复读取文本文件并显示 PID 和状态的反应上下文。

在此处输入图像描述

该过程应该运行,直到我单击“停止”。但在初始化后不到一秒钟,该进程自行退出。

在此处输入图像描述

如果我删除invalidateLater(),该过程将继续运行。或者,如果我使用processx句柄而不是ps文本文件,则该应用程序可以工作,但这对于我的用例来说还不够。

应用代码

会话信息

编辑:垃圾收集

这是因为垃圾收集processx句柄。我可以用 2 个 R 会话来证明这一点。会话 1 创建一个后台进程。

会话 2 循环检查从会话 1 产生的后台进程。

TRUE会话 2 从每秒打印一次开始。但是当我rm(px); gc()在会话 1 中调用时,会话 2 打印FALSE

我现在看到垃圾收集的终止是一个故意的功能processxhttps ://github.com/r-lib/processx#features 。我猜在大多数情况下都是合理的。

0 投票
0 回答
29 浏览

r - R process$new 将标准输出和标准错误写入同一个文件

在我的 R 代码中,我将另一个 R 脚本称为像这样的单独进程

记录器消息和任何错误都被写入同一个日志文件。但是错误消息写在文件顶部而不是写在页面底部

示例日志文件

在上面的示例日志文件中,当错误发生时,我希望在文件末尾打印错误

我也可以问一个子问题吗?为什么即使在代码中有错误之后仍然rp$get_exit_status()返回?zero

0 投票
1 回答
44 浏览

r - 如何在 multidplyr 中设置超时

使用时我不一致地收到以下错误multidplyr(即,对于相同的数据,有时我会收到错误,有时不会):

rs_init 中的错误(self、private、super、options、wait、wait_timeout):无法启动 R 会话,超时

我的设置如下:

recursive_func_c调用的函数在哪里:

据我正确理解,multidplyr 集群由多个由callr. 我收到的错误消息似乎来自callr包。对于调试,我想为callrwithin设置更长的超时时间multidplyr。那可能吗?谢谢你的任何提示。

0 投票
1 回答
134 浏览

r - 如何使用 future.callr 抑制随机数生成警告?

future.callr每次请求未来时,我都会使用它创建一个新线程(?),因此它是单独计算的,主 R 脚本可以继续前进。

当我的期货回来时,我收到以下警告:

在我正在运行的实际代码中,它只是加载一些数据,我不知道为什么(或关心编辑:我确实关心,请参阅下面的评论)它正在生成随机数。如何阻止显示该警告(修复 rng 生成或忽略它)?

我有很多关于期货的行,所以我希望能够以某种方式在开头设置选项,而不必将其添加到每一行。

这是一个示例,我试图忽略该警告。

0 投票
1 回答
59 浏览

r - 在 callr::r() 和 callr::r_bg() 中使用加载了 load_all() 的 R 包的函数

我正在开发一个 R 包,并希望在后台运行正在开发的包中的一些功能,使用callr::r()callr::r_bg().

例如,我创建了一个只有一个功能的包mytest

然后用 加载包pkgload::load_all(),使用devtools包加载开发中的包的功能。之后,我可以在控制台中运行该功能,但不能在后台使用callr::r().

另一方面,如果我安装包并运行library(mytest),上面的代码运行没有问题

请,任何线索为什么callr::r()找不到功能mytest::hello()

看起来load_all()没有将路径添加到可以找到包mytest的源代码的文件夹中。

0 投票
0 回答
34 浏览

r - rmarkdown 渲染 NSE 函数仅在调用者内部失败

我似乎有 NSE、rmarkdown 和 callr 的奇怪组合,类似于Is it possible to disable `callr` for RMarkdown? .

当我为变量设置一个值以在类似于使用 NSE 通过嵌套 eval 和列表调用实现的过滤器调用中使用它时,它会严重失败,但仅在 callr 中失败。

通过调用者运行它:

可以看到它的抱怨sig_cutoff是没有找到,但它存在于环境中,但似乎没有得到传递。

如果我直接运行它,它可以工作:

我已将所有代码放在github repo中。

有趣的是,这绝对是调用者的问题,因为目标也有同样的问题。

调用者 v 1.0.7,rmarkdown v 2.11,R 4.1.0

其他包版本在renv.lock文件中。

0 投票
1 回答
34 浏览

r - 在单独的 R 会话中运行 testthat 测试(如何组合结果)

我需要测试包加载操作(对于我的多版本包)并且知道卸载命名空间和东西是危险的工作。所以我想在一个新的 R 会话中运行每个测试。并行运行我的测试不能满足这个需求,因为它会重用从站,并且这些会变脏。

所以我想callr::r会帮助我。不幸的是,我再次被记录在案的记者所困。

以下是一个最小的示例。放在文件中test-mytest.R

我使用以下方法调用了这个测试文件:

这似乎可以满足我的要求,但是在查看结果时...

...这只是返回的第一个测试。

这个怎么运作:

  • 执行普通测试。
  • 获取当前使用的记者(-- 1 --
  • callr::r用于调用包含测试的测试块。
  • 在通话中,我尝试使用set_reporter,但with_reporter实际上是相同的。
  • 呼叫返回记者(用callr::r尝试过get_reporter(),但with_reporter也返回记者(隐形))

现在返回的记者似乎很好,但是当将其设置为实际的记者时set_reporter,似乎并没有覆盖实际的记者。

请注意,在 处-- 2 --reporter_out包含两个测试结果。

问题

我不确定我希望它做什么,但最后我希望将结果添加到原始报告器((summary或)reporter_in,也就是说,如果那不是某种副本)。