我在Pandas中有一个数据帧,我想用R函数对它做一些统计。没问题!RPy使得将数据帧从Pandas发送到R:
import pandas as pd
df = pd.DataFrame(index=range(100000),columns=range(100))
from rpy2 import robjects as ro
ro.globalenv['df'] = df
如果我们在IPython:
^{pr2}$由于某些原因,ro.globalenv
路由比rmagic
路由稍慢,但是没有关系。重要的是:我最终要使用的数据帧是~100GB。这带来了一些问题:
有没有办法:
目前,^{} 似乎是R和pandas之间数据交换的最有效的选择。在
rpy2
正在使用一种转换机制,该机制试图避免在Python和R之间移动时复制对象。但是,这目前只在R->;Python方向上起作用。在Python有一个名为“buffer interface”的接口,
rpy2
使用这个接口,它可以最小化R和Python之间C级兼容的副本数量(请参见http://rpy.sourceforge.net/rpy2/doc-2.5/html/numpy.html#from-rpy2-to-numpy-文档似乎过时了,因为__array_struct__
接口不再是主要选择)。在在R中没有与缓冲区接口等效的接口,当前阻碍我在
rpy2
中提供等效功能的问题是垃圾收集期间对借用引用的处理(以及缺乏足够的时间仔细考虑)。在总而言之,有一种方法可以在Python和R之间共享数据,而不需要复制,但这需要在R中创建数据
相关问题 更多 >
编程相关推荐