我想从Python程序中访问R。我知道Rpy2、pyrserve和PypeR。
这三个选项的优点或缺点是什么?
发布于 2011-04-13 09:19:18
我知道三个中的一个比其他的更好,但按照问题中给出的顺序:
rpy2:
Python和R (R作为嵌入式进程运行)之间的
pyrserve:
的CPython、Jython、IronPython)
派珀:
编辑: Windows对rpy2的支持
发布于 2011-04-13 00:31:27
来自Journal of Statistical Software on PypeR上的论文
RPy提供了一种从Python访问R的简单而有效的方法。这个包允许Python程序将基本数据类型的Python对象传递给R函数,并在Python对象中返回结果。对于Python和R频繁交互的情况,这些特性使其成为一个有吸引力的解决方案。但是,这个包仍然有一些限制,如下所示。
性能:
对于大型数据集或计算密集型任务,RPy的表现可能不是很好。在生成R数据的Python副本时,不可避免地会消耗大量时间和内存,因为在每一轮对话中,RPy都会将R表达式的返回值转换为基本类型的Python对象或NumPy数组。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库也会保留在内存中。换句话说,R使用的内存只有在宿主Python脚本终止后才能释放。
可移植性:
作为一个用C语言编写的扩展模块,RPy源包必须在POSIX (Portable Operating System Interface for Unix)系统上使用特定的R版本进行编译,并且R必须在启用共享库的情况下编译。此外,Windows的二进制发行版被绑定到不同版本的Python/R的特定组合上,因此用户很难找到适合其软件环境的发行版。
发布于 2012-11-30 06:57:53
在pyper中,我不能使用assign()将大矩阵从python传递给r实例。但是,我对rpy2没有意见。这只是我的经验。
https://stackoverflow.com/questions/5630441
复制相似问题