lga*_*ier 36
我知道其中一个比其他人好,但按照问题中给出的顺序:
rpy2:
pyrserve:
pyper:
编辑: Windows支持rpy2
Hen*_*rik 16
RPy提供了一种从Python访问R的简单而有效的方法.它非常强大,非常方便Python和R之间的频繁交互操作.这个包允许Python程序将基本数据类型的Python对象传递给R函数,并在Python对象中返回结果.这些特性使其成为Python和R频繁交互的案例的有吸引力的解决方案.但是,如下所列,此包装仍有局限性.
性能:
对于大型数据集或计算密集型任务,RPy可能表现不佳.在生成R数据的Python副本时不可避免地消耗了大量的时间和内存,因为在每次会话中,RPy将R表达式的返回值转换为基本类型或NumPy数组的Python对象.RPy2是最近开发的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库也将保留在内存中.换句话说,在主机Python脚本终止之前,R使用的内存无法释放.
可移植性:
作为具有用C编写的扩展的模块,RPy源包必须在POSIX(Unix的可移植操作系统接口)系统上使用特定的R版本进行编译,并且必须在启用共享库的情况下编译R.此外,Windows的二进制发行版绑定了不同版本的Python/R的特定组合,因此用户很难找到用户软件环境的发行版.
从开发人员的角度来看,我们过去使用 rpy/rpy2 为基于 Python 的应用程序提供统计和绘图功能。它在交付我们的应用程序时造成了巨大的问题,因为 rpy/rpy2 需要针对 Python 和 R 的特定组合进行编译,这使得我们无法提供开箱即用的二进制发行版,除非我们也捆绑 R。由于 rpy/rpy2 不是特别容易安装,因此我们最终用 matplotlib 等原生 Python 模块替换了相关部分。如果我们必须使用 R,我们会切换到 Pyrserve,因为我们可以在本地启动 R 服务器并连接到它,而不必担心 R 的版本。
| 归档时间: |
|
| 查看次数: |
16124 次 |
| 最近记录: |