【发布时间】:2014-05-23 09:55:04
【问题描述】:
我有一些内部使用回调的 Python 代码。我希望能够从 R 中调用此代码并让回调与 R 会话通信(例如,在回调中执行 R 代码)。基本上,Python 代码在调用时充当 R 的驱动程序。我不确定如何正确执行此操作。
像 RPy 和 rPython 这样的包似乎不能提供我需要的东西。 Python 代码在执行回调时需要保持特定状态,因此排除了从 R 中对 Python 函数的连续调用。
据我所知,唯一的解决方案是在 R 中启动一个 Python 子进程,然后让它们在必要时进行通信。通信将涉及这样的序列:
-
Python -> R:回调命令 -
R -> Python:回调结果
看了一堆备选方案后,我很难想出最佳的沟通策略(理想情况下是双向且独立于平台的):
- 使用匿名管道。尽管R only seems to support pipes that read or write (not both),这对我来说似乎是最好的解决方案。
- 使用可以关闭和重新打开的命名管道以获得读取和写入功能。 R 会话将分别负责在调用 Python 之前和 Python 完成之后创建和删除命名管道。
我觉得我把事情复杂化了,但我想不出替代方案。有什么想法吗?
【问题讨论】:
-
例如为什么不使用
rpy2?你在r objects中执行你的R代码。 -
@agstudy 如果我没记错的话,
rpy2运行一个嵌入式 R 进程。在我的用例中,我想在 R 回调中访问现有 R 工作区中的数据(例如,不创建嵌入在 Python 中的新 R 工作区)。这可以使用rpy2来完成吗?