Rpy2,pyrserve和PypeR的比较如何?

问题描述 投票:57回答:5

我想从Python程序中访问R。我知道Rpy2,pyrserve和PypeR。

这三个选项的优点或缺点是什么?

python r rpy2 pyrserve pyper
5个回答
36
投票

我比其他人更了解这三个,但按问题中给出的顺序:

rpy2:

  • Python和R之间的C级接口(R作为嵌入式进程运行)
  • 暴露给Python的R对象,无需复制数据
  • 相反,Python的numpy数组可以不经复制就暴露给R
  • 低级接口(靠近R C-API)和高级接口(为方便起见)
  • 可以对向量和数组进行就地修改
  • R回调函数可以在Python中实现
  • 可能具有带有Python标签的匿名R对象
  • 可能进行Python酸洗
  • 使用R的控制台完全自定义R的行为(以便实现完整的R GUI)
  • 具有有限支持的MSWindows

pyrserve:

  • 本机Python代码(将/应该/可能与CPython,Jython,IronPython一起使用]
  • 使用R的储备
  • 与远程计算和RServe相关的优势和不便之处

pyper:

  • 本机Python代码(将/应该/可能与CPython,Jython,IronPython一起使用)
  • 使用管道使Python与R通信(具有与它相关的优点和不便之处)

edit: Windows对rpy2的支持


16
投票

摘自Journal of Statistical Software on PypeR中的论文:

RPy提供了一种从Python访问R的简单有效的方法。它既坚固又非常便于在Python和R之间进行频繁的交互操作。此软件包允许Python程序将基本数据类型的Python对象传递给R函数,并返回生成Python对象。对于Python和R频繁交互的情况,此类功能使其成为有吸引力的解决方案。但是,此软件包仍然有一些限制,如下所示。性能:对于大型数据集或计算密集型而言,RPy可能表现不佳职责。生成Python不可避免地会浪费大量时间和内存R数据的副本,因为在每次会话中RPy都会转换返回的数据R表达式的值转换为基本类型或NumPy数组的Python对象。 RPy2,一个最近开发的RPy分支,使用Python对象引用R对象而不是将它们复制回Python对象。此策略避免了频繁的数据转换并提高速度。但是,内存消耗仍然是一个问题。 [...]当我们实施WebArray(Xia等人,2005)时,这是一种用于微阵列数据分析的在线平台,如果通过Rpy(而不是R的命令行用户界面)运行R,则一项作业会消耗大约四分之一的计算时间。因此,我们决定在后续开发中通过管道在Python中运行R,例如WebArrayDB(Xia et al.2009),其性能与单独运行R时所获得的性能相同。我们不知道造成这种性能差异的确切原因,但是我们注意到RPy直接使用R的共享库来运行R脚本。相反,通过管道运行R意味着直接运行R解释器。记忆:R因不经济地使用内存而受到谴责。大型机使用的内存删除大小为R的对象后,这些对象很少释放。有时唯一从R释放内存的一种方法是退出R。RPy模块将R包装在Python对象中。但是,即使删除了Python对象,R库也将保留在内存中。其他换句话说,在主机Python脚本终止之前,不能释放R使用的内存。可移植性:作为带有用C编写的扩展的模块,必须编译RPy源包。在POSIX(Unix的便携式操作系统接口)上具有特定的R版本系统,并且R必须在启用共享库的情况下进行编译。还有,二进制Windows发行版绑定到不同版本的Windows的特定组合Python / R,因此用户经常很难找到用户的软件环境。


4
投票

在pyper中,我无法使用Assign()将大型矩阵从python传递到r实例。但是,我没有rpy2的问题。这只是我的经验。


4
投票

从开发人员的角度来看,我们曾经使用rpy / rpy2为基于Python的应用程序提供统计和绘图功能。由于需要针对特定​​的Python和R组合编译rpy / rpy2,这在交付应用程序时造成了巨大问题,这使得我们无法提供开箱即用的二进制发行版,除非我们也捆绑了R。由于rpy / rpy2并不是特别容易安装,因此我们最终用本地Python模块(例如matplotlib)替换了相关部分。如果必须使用R,我们将切换到pyrserve,因为我们可以在本地启动R服务器并连接到它,而不必担心R的版本。


0
投票

您是否在Windows中使用rpy2我根本无法使用它。我显然安装它没有问题,但是无法导入。社区表示确实存在问题。有编译的二进制文件作为替代,但它不稳定且已停产。

© www.soinside.com 2019 - 2024. All rights reserved.