53

我对 R 很陌生,并且非常习惯于 python。我不太习惯编写 R 代码。我正在寻找 R 的 python 接口,它可以让我以pythonic 方式使用 R 包。

我做了谷歌研究,发现很少有可以做到这一点的软件包:

但不确定哪个更好?哪个贡献者更多,使用更积极?

请注意,我的主要要求是访问 R 包的 pythonic 方式

4

3 回答 3

66

正如@lgautier 所指出的,关于这个主题已经有了另一个答案。我在这里留下我的答案,因为它增加了作为新手接近 R 的经验,首先了解 Python。


我同时使用 Python 和 R,并同情您作为 R 新手的需求。

由于您得到的任何答案都是主观的,因此我根据我的经验总结几点:

  • 我使用rpy2作为我的接口,发现它是“Pythonic”、稳定、可预测和有效的,足以满足我的需求。我没有使用过其他软件包,所以这不是对它们的评论,而是对 rpy2 本身的优点的评论。
  • 但是不要期望在不学习两者的情况下在 Python 中使用 R 会有一种简单的方法。我发现在两种语言之间添加接口可以在您了解两种语言的情况下轻松编码,但对于缺乏其中一种语言的人来说,这是调试的噩梦。

我的建议:

  1. 对于大多数应用程序,Python 都有一些包可以让你做大部分你想在 R 中做的事情,从数据整理到绘图。查看SciPyNumPypandasBioPythonmatplotlib和其他科学软件包,甚至是完整的AnacondaEnthought python 发行版。这使您可以留在 Python 环境中,并为您提供所需的大部分功能。
  2. 同时,您将需要 R 的大量专用软件包,因此请花一些时间在交互式环境中学习它。我发现几乎不可能在命令行上掌握基本的 R,但是RStudio以及Quick-RLearn-R的教程让我走得非常快。

一旦你知道这两者,那么你将使用rpy2做魔法,而不用担心跨语言调试。


新资源

2015 年 1 月 29 日更新

这个答案已被证明很受欢迎,所以我认为指出两个最近的资源会很有用:

三元组RRservepyRserve允许建立从 Python 到 R 的网桥:现在可以从 Python 调用 R 函数,就好像它们是用 Python 实现的一样,甚至可以通过此连接执行完整的 R 脚本。

  • 现在可以将 R 和 Python 结合使用rmagicIPython/Jupyter从而极大地简化生产结合两种语言的可重复研究和笔记本的工作。
于 2012-07-30T07:36:13.160 回答
5

之前在网站上回答了一个关于比较 rpy2、pyrserve 和 pyper的问题。

关于贡献者的数量,我想说所有 3 个贡献者的数量都相对较少。像Ohloh这样的网站可以给出更详细的答案。

如何积极地使用一个包是很难确定的。一个指标可能是下载次数,另一个指标可能是邮件列表上的帖子数量,或者像 stackoverflow 这样的网站上的问题数量,使用它或引用它的其他包的数量,简历或职位空缺的数量提到包裹。尽管我相信我可以给出公平的评价,但我也可能被视为存在利益冲突。;-)

三者各有利弊。我会说你基于你的选择。

于 2012-07-30T08:20:47.950 回答
4

我个人经历过Rpy,没有Rpy2system我使用了一段时间,但为了使用命令而放弃了它。我的一个典型案例是使用 Python 脚本运行 FORTRAN 模型,并使用 R 进行后处理。根据我的经验,最简单的解决方案是使用 R 创建一个命令行工具,这非常简单(至少在 Linux 下是这样)。命令行工具可以在模型运行的根目录中执行,脚本会在一个Routput目录中生成一组 R 对象和绘图。以这种方式断开 R 和 Python 的优势在于,我可以轻松地将 R 代码与 Python 代码分开调试。

我认为Rpy当需要在 R 和 Python 之间进行大量来回通信时,它真的会发光。但是,如果功能可以很好地分离,并且磁盘 i/o 的开销不是太差,我会坚持system调用。?system有关系统调用以及Rscript将 R 脚本作为命令行工具运行的更多信息,请参阅参考资料。

关于您希望以 Python 方式编写 R 代码的愿望,这是不可能的,因为所有解决方案都要求您以 R 语法编写 R 代码。因为Rpy这意味着 R 语法,但有点不同(.例如没有)。我同意@gauden 的观点,即使用 R through 没有捷径Rpy

于 2012-07-30T09:15:23.050 回答