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

3 投票
2 回答
1317 浏览
提问于 2025-04-18 04:29

我正在尝试把一些数据从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 个回答

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对象放在.Package.__rdata__下。所以我可以在这个rdata对象上执行fetch

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

data['pennLC'][1]

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

要查看数据,可以使用:

print(data['pennLC'][1])
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

撰写回答