pandas и rpy2: Почему ezANOVA работает через robjects.r, но не robjects.packages.importr?

Как и многие, я надеюсь прекратить трансграничные миры R и Python и просто работать на Python, используя Pandas, Pyr2, Numpy и т. Д. Я использую R-пакет ez для своей установки ezANOVA. Это работает, если я делаю что-то нелегко, но почему это не работает, когда я делаю им простой способ? Я не понимаю итоговую ошибку:

File "/Users/malcomreynolds/analysis/r_with_pandas.py", line 38, in <module> res = ez.ezANOVA(data=testData, dv='score', wid='subjectid', between='block', detailed=True) File "/usr/local/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 178, in __call__ return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs) File "/usr/local/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 106, in __call__ res = super(Function, self).__call__(*new_args, **new_kwargs) rpy2.rinterface.RRuntimeError: Error in table(temp[, names(temp) == wid]) : attempt to set an attribute on NULL 

См. Ниже полный воспроизводимый код (требуется несколько пакетов python: pyr2, pandas, numpy):

 import pandas as pd from rpy2 import robjects from rpy2.robjects import pandas2ri pandas2ri.activate() # make pyr2 accept and auto-convert pandas dataframes from rpy2.robjects.packages import importr base = importr('base') ez = importr('ez') robjects.r['options'](warn=-1) # ??? import numpy as np """Make pandas data from from scratch""" score = np.random.normal(loc=10, scale=20, size=10) subjectid = range(10) block = ["Sugar"] * 5 + ["Salt"] * 5 testData = pd.DataFrame({'score':score, 'block':block, 'subjectid': subjectid}) # it looks just like a dataframe from R print testData """HARD WAY: Use ezANOVA thorugh pyr2 *** THIS WORKS ***""" anova1 = robjects.r(""" library(ez) function(df) { # df gets passed in ezANOVA( data=df, dv=score, wid=subjectid, between=block, detailed=TRUE) } """) print anova1(testData) # this command shows that ez instance is setup properly print ez.ezPrecis(data=testData) # successful """EASY WAY: Import ez directly and use it """ # *** THIS APPROACH DOES NOT WORK *** # yet, trying to use ez.ezANOVA yields an excpetion aboutthe wid value # res = ez.ezANOVA(data=testData, dv='score', wid='subjectid', between='block', detailed=True) # print res # *** THIS APPROACH WORKS (and also uses my options change) *** res = ez.ezANOVA(data=testData, dv=base.as_symbol('score'), wid=base.as_symbol('subjectid'), between=base.as_symbol('block')) print res , import pandas as pd from rpy2 import robjects from rpy2.robjects import pandas2ri pandas2ri.activate() # make pyr2 accept and auto-convert pandas dataframes from rpy2.robjects.packages import importr base = importr('base') ez = importr('ez') robjects.r['options'](warn=-1) # ??? import numpy as np """Make pandas data from from scratch""" score = np.random.normal(loc=10, scale=20, size=10) subjectid = range(10) block = ["Sugar"] * 5 + ["Salt"] * 5 testData = pd.DataFrame({'score':score, 'block':block, 'subjectid': subjectid}) # it looks just like a dataframe from R print testData """HARD WAY: Use ezANOVA thorugh pyr2 *** THIS WORKS ***""" anova1 = robjects.r(""" library(ez) function(df) { # df gets passed in ezANOVA( data=df, dv=score, wid=subjectid, between=block, detailed=TRUE) } """) print anova1(testData) # this command shows that ez instance is setup properly print ez.ezPrecis(data=testData) # successful """EASY WAY: Import ez directly and use it """ # *** THIS APPROACH DOES NOT WORK *** # yet, trying to use ez.ezANOVA yields an excpetion aboutthe wid value # res = ez.ezANOVA(data=testData, dv='score', wid='subjectid', between='block', detailed=True) # print res # *** THIS APPROACH WORKS (and also uses my options change) *** res = ez.ezANOVA(data=testData, dv=base.as_symbol('score'), wid=base.as_symbol('subjectid'), between=base.as_symbol('block')) print res 

One Solution collect form web for “pandas и rpy2: Почему ezANOVA работает через robjects.r, но не robjects.packages.importr?”

В простой версии вы передаете имена символов в виде строк. Это не то же самое, что символ.

Проверьте использование as_symbol в Минимальном примере регрессии rpy2 с использованием кадра данных pandas

  • Сюжеты, сделанные с rpy, отправленные на X11, внезапно закрываются?
  • установить rpy2 на Windows7 64bit для Python 2.7
  • Изменить объект r с помощью rpy2
  • выравнивание отдельных графиков без привязки в ggplot2 с использованием Rpy2 в Python
  • Преобразование RPY2 ListVector в словарь Python
  • Какой объект перейти к R из rpy2?
  • Ошибка R_HOME с rpy2
  • Python и Rpy2: функция вызова функции с опциями, в которых есть "."
  • Преобразование матрицы R в Pandas Dataframe
  • Как сохранить ярлыки, когда SPSS-файл (.sav) импортирован в pandas через rpy?
  • rpy2 установить на windows 7
  • Python - лучший язык программирования в мире.