проблема преобразования numpy2ri с rpy2 2.2.2

1

Я использую rpy2-2.2.2 с новым свободным дистрибутивом enthought python, который включает numpy 1.6.0 и python 2.7.2. я easy_installed rpy2, в результате которого v.2.2.2 был установлен, и все тесты были успешными.

Проблема, с которой я столкнулась, - это код, который я написал, который отлично работал с rpy2 2.1.8 и python 2.6. Проблема заключается в преобразовании из numpy в R для массивов.

Вот фрагмент соответствующего кода:

import rpy2                    
import rpy2.rinterface as rinterface
import rpy2.robjects as rob    
import rpy2.rlike.container as rlc
import numpy as np            
import rpy2.robjects.numpy2ri  
r = rob.r
...
    HGr     = rob.conversion.py2ri(HG_reg)
    RHSr    = rob.conversion.py2ri(RHS)
    #
    CalData = rlc.TaggedList([HGr,RHSr],tags=('hg','rhs'))
    CalData = rob.DataFrame(CalData)

    r('''library(pls)''')
    #rob.globalEnv["HGr"] = HGr
    #rob.globalEnv["RHSr"] = RHSr
    rob.globalenv["CalData"] = CalData


    # perform the PLS regression
    if wetlflag:
        HGresults = r.plsr(r("hg ~ rhs.1 + rhs.2 + rhs.3 + rhs.4"),data=CalData,validation="LOO")

Я с удовольствием признаю, что это не самый элегантный способ сделать что-то, но он работал до и сейчас, когда мне нужно предоставить результаты, все сломано (!). Ошибка, которую я получаю, следующая:

   Traceback (most recent call last):
  File "Mercury_PLS_WL_DF.py", line 224, in <module>
    HGr     = rob.conversion.py2ri(HG_reg)
  File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/rpy2-2.2.2dev_20110726-py2.7-macosx-10.5-i386.egg/rpy2/robjects/__init__.py", line 134, in default_py2ri
    raise(ValueError("Nothing can be done for the type %s at the moment." %(type(o))))
ValueError: Nothing can be done for the type <type 'numpy.ndarray'> at the moment.

Я нашел здесь обсуждение и получил впечатление, что массивы numpy теперь автоматически преобразуются в массивы R, но комментирование rob.conversion.py2ri(HG_reg) и использование массивов numpy напрямую также, похоже, терпит неудачу. Мне что-то не хватает? Почему это нарушит между 2.1.8 и 2.2.2?

Теги:
rpy2

1 ответ

3
Лучший ответ

С http://rpy.sourceforge.net/rpy2/doc-2.2/html/numpy.html#from-numpy-to-rpy2:

Предупреждение

В более ранних версиях rpy2 импорт был всем необходимым для преобразования. Побочный эффект при импорте модуля может привести к проблемам, и теперь есть дополнительный шаг, чтобы сделать преобразование активным: вызовите функцию rpy2.robjects.activate().

Поэтому поставьте rpy2.robjects.activate() после импорта, и все будет в порядке.

  • 0
    спасибо за супер быстрый ответ! Кажется, мне нужно активировать конкретный метод -> rpy2.robjects.numpy2ri.activate (). Должно быть, я смотрел на устаревший набор документации, потому что это предупреждение не было ....
  • 0
    Да, когда я зашел на сайт, документация по умолчанию, которая появилась, была все еще doc-2.1 .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню