【问题标题】:numpy2ri conversion problem with rpy2 2.2.2rpy2 2.2.2的numpy2ri转换问题
【发布时间】:2011-10-13 20:17:35
【问题描述】:

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

这里是相关代码的sn-p:

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 之间中断?

【问题讨论】:

    标签: python r rpy2


    【解决方案1】:

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

    警告

    在 rpy2 的早期版本中,只需要导入即可进行转换。导入模块时的副作用可能会导致问题,现在有一个额外的步骤来激活转换:调用函数 rpy2.robjects.activate()。

    所以在导入之后加上rpy2.robjects.activate() 应该没问题。

    【讨论】:

    • 感谢您的超快回复!看来我必须实际激活特定方法-> rpy2.robjects.numpy2ri.activate()。我一定一直在查看一组过时的文档,因为该警告不存在....
    • 是的,当我访问该站点时,出现的默认文档仍然是 doc-2.1
    • 我在另一个 stackoverflow 网站上看到了关于需要激活的讨论,但没有看到如何实际操作。再次感谢@agf!
    • 检查新版本带来的变化也可能会有所帮助:rpy.sourceforge.net/rpy2/doc-2.2/html/changes.html#id2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2012-09-12
    • 2011-01-27
    • 2012-06-02
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多