Rpy2的操作限制是什么?
我会一些基础的Python编程,所以想继续在Python的数据科学领域发展。问题是,有很多R语言的包对我这个社会科学的人很有吸引力。
Rpy2能否让我完全使用任何一般的R包,还是说有什么限制?在实际使用中效果如何?
如果Rpy2的功能太有限,我可能不得不转到R语言,但我不太想这样,因为这样会增加额外的负担。
谢谢!
2 个回答
我建议你使用 RPy2 和 IPython 的 %rmagic 功能。
不过,RPy2 并不是把 R 的统计函数库直接搬到 Python 里。它其实是一个简单的方法,可以让你在 Python 中调用 R(后台会启动一个 R 解释器)。你可以在 R 和 Python 之间传递一些基本的数据结构(比如 numpy 数组等),但一些更复杂的结构(比如 R 的 zoo 或 xts 对象)可能会出现问题。
最后,你还是需要了解 R 的语法等知识才能使用 RPy2。在 Python 中与 R 对象互动是很不错,但你仍然需要对 R 对象有很多了解。
让我们来看看这些假设的限制。
Rpy2
在底层(也就是rpy2.rinterface
这一层)实际上暴露了R语言的一个很大部分C接口。简单来说,使用rpy2
可以做的事情比直接在R中做的还要多(如果想要追赶的话,可能只有写R的C扩展才能做到)。有趣的是,从rpy2
中做“R的事情”有时比直接在R中做要快(你可以查看rpy2
的文档,里面有关于访问R向量元素的性能对比)。
在rpy2
的更高层(rpy2.robject
这一层),增加了一层使得“做R的事情”变得更像Python的方式(虽然这样可能会牺牲上面提到的性能)。R的包看起来就像Python的模块,有一些类,比如Formula、Factor等,让所有的R对象都能作为Python类来使用,还有一个转换系统,可以让复杂的R结构自动映射到Python对象(你可以在rpy2
的文档中看到关于lme4
的例子),同时可以即时转换无效的R变量名(在R中,'.'是一个有效的变量名字符),还可以根据R文档即时生成Python的文档字符串。