использование / документация pandas.rpy.common.load_data()?

#python #r #pandas #dataframe #rpy2

#python #r #pandas #фрейм данных #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?

Ответ №1:

Я не знаю, является ли это «правильным» использованием 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») для перехода к новым рабочим каталогам.

Ответ №2:

load_data Функция может использоваться для загрузки наборов данных в фрейм данных, которые доступны в datasets пакете R, поэтому она является оболочкой вокруг функции 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

Если вы хотите преобразовать a rpy2.robjects... , вы можете сделать:

 from rpy2.robjects import pandas2ri
pandas2ri.activate()
  

и тогда преобразование должно произойти автоматически. Или вы можете сделать явно: pandas2ri.ri2pandas(rpy2_object)