R和Python之间的双向通信
Posted
技术标签:
【中文标题】R和Python之间的双向通信【英文标题】:Bidirectional communication between R and Python 【发布时间】: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
来完成吗?
【参考方案1】:
答案是旧的,但如果有人需要无需安装的工具,请查看: https://github.com/jstar88/pyCommunicator
它可以按照你的要求进行通信和使用回调
【讨论】:
以上是关于R和Python之间的双向通信的主要内容,如果未能解决你的问题,请参考以下文章