rpy2(版本2.3.10) - 将数据从R包导入python

时间:2014-04-27 17:33:10

标签: python r pandas rpy2

所以我试图将一些R数据包中的数据导入到python中,以便测试我编写的其他一些python-rpy2函数。特别是,我使用R中的SpatialEpi包和pennLC数据集。

所以我能够导入rpy2包并正确连接到包。但是,我不确定如何访问包中的数据。

import rpy2.robjects as robjects
from rpy2.robjects.packages import importr
spep = importr("SpatialEpi")

但是,我似乎无法访问pennLC包中的数据对象SpatialEpi来测试该功能。等效的R命令是:

data(pennLC)

任何建议。

2 个答案:

答案 0 :(得分:2)

在R中,执行data("foo")可以在工作区中创建任意数量的对象。在rpy2中,事物包含在环境中。这使它更清洁。

from rpy2.robjects.packages import importr, data
spep = importr("SpatialEpi")
pennLC_data = data(spep).fetch('pennLC')

pennLC_dataEnvironment(将其视为命名空间)。

列出所提取的内容:

pennLC_data.keys()

获取想要的数据对象:

pennLC_data['pennLC'] # guessing here, it might be a different name

答案 1 :(得分:1)

所以我根据Laurent上面的消息给出了一些答案。

我使用的是rpy2版本2.3.10,因此引入了与上面Laurent代码的一些差异。这就是我所做的。

import rpy2.objects as robj
from rpy2.robjects.packages import importr
spep = importr('SpatialEpi', data = True)
data = spep.__rdata__.fetch('pennLC')

首先请注意,rpy2 2.3.10中没有.data方法 - 名称可能已更改。但相反,2.3.10文档表明使用data=True中的importr参数会在PackageData fetch .Package.__rdata__ . So I can do a rdata下放置on the个对象`对象。

然后,当我想访问数据时,我可以使用以下代码。

data['pennLC'][1]

In [43]: type(d['pennLC'][1])
Out[43]: rpy2.robjects.vectors.DataFrame

查看数据:

print(data['pennLC'][1])