Rpy2,pyrserve和PypeR如何比较?

我想从Python程序中访问R.我知道Rpy2,pyrserve和PypeR。 这三种选择有哪些优点或缺点?     
已邀请:
我知道其中一个比其他人好,但按照问题中给出的顺序: rpy2: Python和R之间的C级接口(作为嵌入式进程运行的R) 暴露给Python的R对象无需复制数据 相反,Python的numpy数组可以在不进行复制的情况下暴露给R 低级接口(接近R C-API)和高级接口(为方便起见) 可以对矢量和数组进行就地修改 R回调函数可以用Python实现 可以使用带有Python标签的匿名R对象 Python可以腌制 通过其控制台完全自定义R的行为(因此可以实现完整的R GUI) MSWindows支持有限 pyrserve: 原生Python代码(将/应该/可以与CPython,Jython,IronPython一起使用) 使用R的Rserve 与远程计算和RServe相关的优点和不便 pyper: 原生Python代码(将/应该/可以与CPython,Jython,IronPython一起使用) 使用管道让Python与R通信(具有与之相关的优点和不便) 编辑:Windows支持rpy2     
来自PypeR统计软件期刊的论文:   RPy提供了一种从Python访问R的简单而有效的方法。它非常强大   方便Python和R之间频繁的交互操作。这个包允许   Python程序将基本数据类型的Python对象传递给R函数并返回   导致Python对象。这些特性使其成为Python和R频繁交互的案例的有吸引力的解决方案。但是,如下所列,此包装仍有局限性。   性能:   RPy对于大型数据集或计算密集型可能表现不佳   职责。在生成Python时不可避免地消耗了大量的时间和内存   R数据的副本,因为在每一轮对话中RPy都会转换返回的数据   R表达式的值到基本类型或NumPy数组的Python对象中。 RPy2,a   最近开发的RPy分支,使用Python对象来引用R对象而不是   将它们复制回Python对象。此策略可避免频繁的数据转换   并提高速度。但是,内存消耗仍然是一个问题。 [...]   当我们实施WebArray(Xia et al.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库也将保留在内存中。其他   单词,R使用的内存在主机Python脚本终止之前无法释放。   可移植性:   作为具有用C编写的扩展的模块,必须编译RPy源包   在POSIX上使用特定的R版本(Unix的可移植操作系统接口)   系统和R必须在启用共享库的情况下编译。另外,二进制   Windows的发行版绑定到不同版本的特定组合   Python / R,因此用户很难找到分发版   用户的软件环境。     
在pyper中,我无法使用assign()将大型矩阵从python传递给r实例。但是,我没有rpy2的问题。 这只是我的经验。     
从开发人员的角度来看,我们曾经使用rpy / rpy2为基于Python的应用程序提供统计和绘图功能。它在交付我们的应用程序时引起了很大的问题,因为rpy / rpy2需要针对Python和R的特定组合进行编译,这使得我们无法提供开箱即用的二进制分发,除非我们捆绑R。因为rpy / rpy2不是特别容易安装,所以我们最终用matplotlib等原生Python模块替换相关部分。如果我们必须使用R,我们就会切换到pyrserve,因为我们可以在本地启动R服务器并连接到它而不用担心R的版本。     

要回复问题请先登录注册