2014-06-14 38 views
3

我想將一些<class 'rpy2.robjects.vectors.Matrix'>變量轉換成Pandas數據框。pandas.rpy.common.load_data()用法/文檔?

有很多的如何這樣做在互聯網上,所有給予簡單的例子複製粘貼的說明:

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矩陣轉換爲數據幀熊貓?

回答

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)

4

我不知道這是否是「正確的」使用load_data,但我發現如果你的R dataframe(比如說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」)導航到新的工作目錄。