pandas.rpy.common.load_data() 的使用/文档?
我正在尝试把一些 <class 'rpy2.robjects.vectors.Matrix'>
类型的变量转换成 Pandas 数据框。
网上有很多关于如何做到这一点的复制粘贴的说明,通常都会给出一个简单的例子:
pandas.rpy.common.load_data("infert")
但没有说明 "infert"
是从哪里来的。我找不到这个函数的任何文档(为什么没有呢?),但显然我不能使用它:
summary= r.summary(linear_model)
filtered_summary=summary.rx2("tTable")
print com.load_data("filtered_summary")
这让我得到了:
---------------------------------------------------------------------------
LookupError Traceback (most recent call last)
<ipython-input-68-a087eddd5220> in <module>()
8 #print test1_sum.names
9 print type(r_res)
---> 10 print com.load_data("filtered_summary")
11 #print pd.DataFrame(test1_sum.rx2("tTable"))
12
/usr/lib64/python2.7/site-packages/pandas/rpy/common.pyc in load_data(name, package, convert)
29 r.data(name)
30
---> 31 robj = r[name]
32
33 if convert:
/usr/lib64/python2.7/site-packages/rpy2/robjects/__init__.pyc in __getitem__(self, item)
226
227 def __getitem__(self, item):
--> 228 res = _globalenv.get(item)
229 res = conversion.ri2ro(res)
230 res.__rname__ = item
LookupError: 'filtered_summary' not found
而:
summary= r.summary(linear_model)
print com.load_data("summary")
则让我得到了:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-69-b51722281aa4> in <module>()
8 #print test1_sum.names
9 print type(r_res)
---> 10 print com.load_data("summary")
11 #print pd.DataFrame(test1_sum.rx2("tTable"))
12
/usr/lib64/python2.7/site-packages/pandas/rpy/common.pyc in load_data(name, package, convert)
32
33 if convert:
---> 34 return convert_robj(robj)
35 else:
36 return robj
/usr/lib64/python2.7/site-packages/pandas/rpy/common.pyc in convert_robj(obj, use_pandas)
222 return converter(obj)
223
--> 224 raise TypeError('Do not know what to do with %s object' % type(obj))
225
226
TypeError: Do not know what to do with <class 'rpy2.robjects.functions.SignatureTranslatedFunction'> object
所以:
- 我该如何正确使用
load_data
? - 我怎样才能把我的 R 矩阵最好地转换成 Pandas 数据框?
2 个回答
我不太确定这是不是使用load_data的“正确”方式,但我发现如果你的R数据框(比如叫myRData)存储在默认的工作空间(.RData文件)里,并且在默认的工作目录下,那么你可以用load_data来加载myRData,方法是:
import rpy2.robjects as robjects
import pandas.rpy.common as com
print robjects.r.load(".RData")
myRData = com.load_data('myRData')
你还可以使用robjects.r.XXX来运行其他R函数,比如robjects.r.getwd()或者robjects.r.setwd("path_to_new_working_directory"),这样可以帮助你切换到新的工作目录。
load_data
函数可以用来把 R 语言中的数据集加载到一个数据框(dataframe)里,这些数据集来自 R 的 datasets
包。简单来说,它是 R 语言中 data()
函数的一个封装。
例如:
from pandas.rpy.common import load_data
iris = load_data('iris')
这段代码会加载著名的鸢尾花(iris)数据集。文档中对此有简要提及:http://pandas.pydata.org/pandas-docs/stable/r_interface.html#transferring-r-data-sets-into-python
如果你想把一个 rpy2.robjects...
对象转换成 pandas 数据框,你可以这样做:
from rpy2.robjects import pandas2ri
pandas2ri.activate()
这样转换应该会自动完成。或者你也可以明确地这样做:pandas2ri.ri2pandas(rpy2_object)