npyy2ri转换问题与rpy2 2.2.2

时间:2011-07-26 23:20:44

标签: python r rpy2

我正在使用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.

我发现了讨论here并且给人的印象是numpy数组现在自动转换为R数组,但是注释掉rob.conversion.py2ri(HG_reg)语句并直接使用numpy数组似乎也失败了。我错过了一些明显的东西吗为什么会在2.1.8和2.2.2之间打破?

1 个答案:

答案 0 :(得分:3)

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

  

警告

     

在早期版本的rpy2中,导入是进行转换所需的全部内容。导入模块时的副作用可能会导致问题,现在还有一个额外的步骤可以使转换处于活动状态:调用函数rpy2.robjects.activate()。

所以在导入后放rpy2.robjects.activate(),你应该没问题。