【问题标题】:Bidirectional communication between R and PythonR和Python之间的双向通信
【发布时间】:2014-05-23 09:55:04
【问题描述】:

我有一些内部使用回调的 Python 代码。我希望能够从 R 中调用此代码并让回调与 R 会话通信(例如,在回调中执行 R 代码)。基本上,Python 代码在调用时充当 R 的驱动程序。我不确定如何正确执行此操作。

像 RPy 和 rPython 这样的包似乎不能提供我需要的东西。 Python 代码在执行回调时需要保持特定状态,因此排除了从 R 中对 Python 函数的连续调用。

据我所知,唯一的解决方案是在 R 中启动一个 Python 子进程,然后让它们在必要时进行通信。通信将涉及这样的序列:

  • Python -> R:回调命令
  • R -> Python:回调结果

看了一堆备选方案后,我很难想出最佳的沟通策略(理想情况下是双向且独立于平台的):

  1. 使用匿名管道。尽管R only seems to support pipes that read or write (not both),这对我来说似乎是最好的解决方案。
  2. 使用可以关闭和重新打开的命名管道以获得读取和写入功能。 R 会话将分别负责在调用 Python 之前和 Python 完成之后创建和删除命名管道。

我觉得我把事情复杂化了,但我想不出替代方案。有什么想法吗?

【问题讨论】:

  • 例如为什么不使用rpy2?你在r objects中执行你的R代码。
  • @agstudy 如果我没记错的话,rpy2 运行一个嵌入式 R 进程。在我的用例中,我想在 R 回调中访问现有 R 工作区中的数据(例如,不创建嵌入在 Python 中的新 R 工作区)。这可以使用rpy2 来完成吗?

标签: python r ipc


【解决方案1】:

答案是旧的,但如果有人需要无需安装的工具,请查看: https://github.com/jstar88/pyCommunicator

它可以按照你的要求进行通信和使用回调

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多