rpy2(版本2.3.10)- 从R包导入数据到Python
我正在尝试把一些数据从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