【问题标题】:Python interface for R Programming Language [duplicate]R编程语言的Python接口[重复]
【发布时间】:2012-07-27 20:25:15
【问题描述】:

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

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

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

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

【问题讨论】:

标签: python r rpy2 pyrserve pyper


【解决方案1】:

正如@lgautier 所指出的,已经有another answer on this subject。我在这里留下我的答案,因为它增加了作为新手接近 R 的经验,首先了解 Python。


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

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

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

我的建议:

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

一旦您了解两者,那么您将使用rpy2 施展魔法,而无需担心跨语言调试。


新资源

2015 年 1 月 29 日更新

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

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

  • 现在可以使用 rmagic in IPython/Jupyter 将 R 和 Python 结合起来,极大地简化了制作结合两种语言的可重复研究和笔记本的工作。

【讨论】:

  • 我发现在 Python 中调试 R 代码非常困难。例如,browser 语句没有被选中。你有什么经验?
  • @PaulHiemstra:这里也一样。我永远无法确定某些事情是否无法工作(a)因为我在 Python 或 R 中有一个错误,或者(b)因为 rpy2 不工作,或者(c)两者兼而有之。现在我直接在 R 中编写我需要的代码,然后在需要时从 Python 中执行脚本。
  • 浏览器目前无法在 rpy2 (bitbucket.org/lgautier/rpy2/issue/66/…) 中工作。在评估 R 代码期间发生的错误将引发 RRuntimeError 异常,该异常应该说明 R 或 Python 中的故障点。
  • 你用过Rpy2以外的包吗!它们有什么好处吗?
  • 不,对不起,@darshan。我让其他人列出这些包裹的经验。但是,已引用的其他答案具有一些令人信服的优点和缺点,可以帮助您入门。只需查看他们的文档将有助于评估它们与您的编码风格的匹配程度。
【解决方案2】:

关于comparing rpy2, pyrserve, and pyper 彼此之间的问题之前在网站上得到了解答。

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

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

三者各有优劣。我会说你的选择基于此。

【讨论】:

  • 完全公平,Laurent,感谢您在 rpy2 上所做的出色工作 :)
  • 在 rpy2 中是 Ohloh 中列出的唯一项目。但这没关系。从论坛看起来像 rpy2 在堆栈溢出中看起来更多。如果我在这个过程中受到打击,我有你们问。感谢您的回复:)
【解决方案3】:

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

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

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

【讨论】:

  • 代码 sn-ps 提供了here,以了解如何在 R 中设置函数调用以按照您描述的方式从 Python 运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
相关资源
最近更新 更多