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

3

我正在尝试将一个R包中的一些数据导入到Python中,以便测试我编写的其他Python-Rpy2函数。特别地,我正在使用R中的SpatialEpi包和pennLC数据集。

因此,我已经成功导入了rpy2包并正确连接到该程序包。但是,我不确定如何访问该程序包中的数据。

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

然而,我似乎无法访问SpatialEpi包中的数据对象pennLC来测试该函数。相应的R命令为:

data(pennLC)

任何建议。
2个回答

2

R中执行data("foo")会在工作空间中创建任意数量的对象。在rpy2中,所有内容都包含在一个环境中,这样更加清晰。

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

pennLC_data是一个 Environment(可以把它想象成命名空间)。

要列出所获取的内容:

pennLC_data.keys()

为了获取所需的数据对象:
pennLC_data['pennLC'] # guessing here, it might be a different name

嘿,Laurent。这非常有帮助。我正在使用rpy2 2.3.10版本,所以你提到的一些指令并没有正确地运行--现在在Package对象上没有“data”方法了。但是我把我的答案放在下面。如果您对我下面的写法有任何建议,请告诉我。 - krishnab
@krishnab 啊,是的。data()在rpy2-2.4.0-dev中。在rpy2-2.3.10中使用data=True/.__rdata__是可以的。2.4版本中的data()函数旨在使事情变得不那么混乱。 - lgautier

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文档表明,在importr中使用data=True参数将在.Package.__rdata__下放置一个PackageData对象。因此,我可以对rdata对象进行fetch操作。
然后,当我想要访问数据时,我可以使用以下代码。
data['pennLC'][1]

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

查看数据:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接