1

numpy 1.6.0 と python 2.7.2 を含む新しい無料の Enthought python ディストリビューションで rpy2-2.2.2 を使用しています。rpy2 を easy_installed した結果、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 の間で壊れるのですか?

4

1 に答える 1

3

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

警告

以前のバージョンの rpy2 では、変換に必要なのはインポートだけでした。モジュールをインポートする際の副作用が問題を引き起こす可能性があるため、変換をアクティブにする追加の手順が追加されました: 関数 rpy2.robjects.activate() を呼び出します。

したがってrpy2.robjects.activate()、インポート後に配置すれば問題ありません。

于 2011-07-26T23:26:56.080 に答える