Python编程语言的Python接口
我对R很新,而且很习惯Python。 我不太习惯写R代码。 我正在寻找R接口的Python接口,这让我使用python的 R包。
我做了谷歌的研究,发现几个包可以做到这一点:
- Rpy2
- PypeR
- pyRserve
但不知道哪一个更好? 哪些有更多的贡献者和更积极的使用?
请注意我的主要要求是访问R包的Python途径 。
正如@lgautier所指出的那样, 在这个问题上已经有了另一个答案 。 我在这里留下我的答案,因为它增加了将R作为新手的经验,首先了解Python。
我同时使用Python和R,并且同情你作为R的新手的需要。
既然你得到的答案是主观的,我总结了几点经验:
- 我使用rpy2作为我的界面,并发现它是'Pythonic',稳定,可预测,有效,足以满足我的需求。 我没有使用其他的软件包,所以这不是对他们的评论,而是rpy2本身的优点。
- 但是不要指望在不学习两者的情况下,使用R的简单方法。 我发现在这两种语言之间添加一个接口可以让你轻易地编码,但是对于某些语言不完善的人来说,这是一个debugging的噩梦。
我的build议:
- 对于大多数应用程序来说,Python有一些软件包,可以让你在R中进行大部分的工作,从数据转换到绘图。 查看SciPy , NumPy , pandas , BioPython , matplotlib和其他科学软件包,甚至是完整的Anaconda或Enthought python发行版。 这使您可以保持在Python环境中,并为您提供所需的大部分function。
- 同时,您将需要R广泛的专用软件包,所以花一些时间在交互式环境中学习它。 我发现几乎不可能在命令行上掌握基本的R,但是RStudio和Quick-R和Learn-R的教程让我变得非常快。
一旦你知道了两者,那么你将会用rpy2来做魔法,而不用担心跨语言的debugging。
新资源
2015年1月29日更新
这个答案已经被certificate是stream行的,所以我认为指出两个最近的资源是有用的:
- Ralph Heinkel在2014年EuroPython上就这个话题进行了精彩的演讲。 结合Python和R的强大世界的video可在EuroPython YouTube频道上find 。 引用他:
三元组R , Rserve和pyRserve允许构build从Python到R的networking桥接:现在,可以从Python调用R函数,就好像它们是用Python实现的一样,甚至可以通过这个连接来执行完整的R脚本。
- 现在可以在
IPython/Jupyter
使用rmagic
结合R和Python ,极大地简化了生产可重复研究和结合两种语言的笔记本的工作。
关于rpy2,pyrserve和pyper相互比较的问题在网站上被回答了。
关于贡献者的数量,我想说3个都有一个相对较小的数字。 像Ohloh这样的网站可以给出更详细的答案。
使用一个软件包有多积极,难以确定。 一个迹象可能是下载次数,另一个可能是邮件列表上的post数量,或者像站点上的数字问题,使用它或引用它的其他软件包数量,提及包。 尽pipe我相信我可以给予公正的评价,但也可能会被视为有利益冲突。 😉
三者都有其优点和缺点。 我会说,你基于你的select。
我个人的经验是与Rpy
,而不是Rpy2
。 我用了一段时间,但放弃了它,有利于使用system
命令。 对我来说,一个典型的例子是使用Python脚本运行FORTRAN模型,并使用R进行后期处理。根据我的经验,最简单的解决scheme是使用R创build一个命令行工具,这很简单(至less在Linux下)。 命令行工具可以在模型运行的根目录下执行,脚本会在Routput
目录下生成一组R对象和图。 以这种方式断开R和Python的好处是我可以很容易地debugging与Python代码分开的R代码。
我认为当R和Python之间需要很多来回的交stream时, Rpy
真正的闪耀。 但是,如果function很好地分离,并且磁盘I / O的开销不是太差,我会坚持system
调用。 有关系统调用的更多信息,请参阅?system
,以及Rscript
R脚本作为命令行工具运行的Rscript
。
关于你希望以Python的方式编写R代码,这是不可能的,因为所有的解决scheme都要求你用R语法编写R代码。 对于Rpy
这意味着R语法,但有一点不同(例如没有)。 我同意@gauden,通过Rpy
使用R没有任何捷径。