R与Python的双向通信

1 投票
1 回答
1158 浏览
提问于 2025-04-18 07:23

我有一些Python代码,它内部使用了回调函数。我想从R中调用这些代码,并让回调函数能够和R会话进行沟通(比如在回调中执行R代码)。简单来说,当调用这些Python代码时,它就像是R的一个驱动程序。我不太确定该怎么正确地实现这个功能。

像RPy和rPython这样的包似乎无法满足我的需求。因为Python代码在执行回调时需要保持特定的状态,所以从R中连续调用Python函数是不行的。

根据我的了解,唯一的解决方案是要在R中启动一个Python子进程,然后在需要的时候让它们进行沟通。这个沟通的过程大致是这样的:

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

我看了很多其他的方案,但很难找到最佳的沟通策略(希望是双向的,并且不依赖于平台):

  1. 使用匿名管道。这对我来说似乎是最好的解决方案,不过R似乎只支持读取写入的管道(不能同时进行)
  2. 使用命名管道,这样可以关闭并重新打开,以实现读写功能。R会话需要在调用Python之前和Python完成之后,分别负责创建和移除这个命名管道。

我觉得自己可能把事情搞得太复杂了,但我想不出其他的替代方案。有什么想法吗?

1 个回答

0

这个答案虽然有点老了,但如果有人需要一个不需要安装的工具,可以看看这个:https://github.com/jstar88/pyCommunicator

它可以进行通信,并且可以使用你所需要的回调功能。

撰写回答