pandas.rpy.common.load_data()用法/文档?

时间:2014-06-14 14:04:50

标签: python r pandas dataframe rpy2

我正在尝试将一些<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 DataFrame?

2 个答案:

答案 0 :(得分:4)

我不知道这是否是正确的&#34;使用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(&#34; path_to_new_working_directory&#34;),以导航到新的工作目录。

答案 1 :(得分:2)

load_data函数可用于将数据集加载到R datasets包中可用的数据框中,因此它是R data()函数的包装器。

例如:

from pandas.rpy.common import load_data
iris = load_data('iris')

将加载众所周知的虹膜数据集。文档简要提及:http://pandas.pydata.org/pandas-docs/stable/r_interface.html#transferring-r-data-sets-into-python

如果您要转换rpy2.robjects...,您可以执行以下操作:

from rpy2.robjects import pandas2ri
pandas2ri.activate()

然后转换应该自动发生。或者你可以明确地做:pandas2ri.ri2pandas(rpy2_object)