#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)