そうそう、RobjをPython側でリスト、辞書で受け取ると
Rpyがうまく変換してくれないと、正しく実行してくれない。

特に、R特有のクラスである場合は困ってしまう。悩みます。

たとえば、
http://www21.atwiki.jp/fun-sci/pages/23.html
で出力される"ret"データは
r.summary(ret)としても、数値入り辞書と解釈されて

[['  3', '-none-', 'numeric'], [' 11', '-none-', 'list'], ['  1', '-none-', 'num
eric'], ['100', '-none-', 'numeric'], ['  3', '-none-', 'call'], ['100', '-none-
', 'numeric'], ['  1', '-none-', 'logical'], ['  3', 'formula', 'call'], ['  1',
 '-none-', 'logical'], ['  1', '-none-', 'character'], ['  3', 'terms', 'call'],
 ['  0', '-none-', 'NULL'], ['  3', '-none-', 'list'], ['  4', '-none-', 'numeri
c'], ['  0', '-none-', 'NULL'], ['  0', '-none-', 'NULL'], ['  4', '-none-', 'li
st'], ['  1', '-none-', 'numeric'], ['100', '-none-', 'numeric'], ['  1', '-none
-', 'numeric'], ['  5', '-none-', 'list'], ['  3', '-none-', 'numeric'], ['  1',
 '-none-', 'numeric'], ['  1', '-none-', 'numeric'], ['  1', '-none-', 'numeric'
], ['100', '-none-', 'numeric'], ['100', '-none-', 'numeric'], ['100', '-none-',
 'numeric'], ['  3', '-none-', 'list'], ['  1', '-none-', 'numeric']]

こんなのが返ってきてしまう。
そんなときは、こうしてください。

#一時的に生のRobjを受け取るようにする

set_default_mode(NO_CONVERSION)

ret = r.glm(r("y~x1+x2"),data=r.data_frame(x1=x1,x2=x2,y=y,family='gaussian'))

# デフォルトのrpyデータ変換に戻す
set_default_mode(BASIC_CONVERSION)

# pythonで読めるデータに変換
# このときBASIC_CONVERSIONに戻していないと返り値もRobjになってしまう。
ret_py = ret.as_py()

# summaryする。係数、Interceptの検定なども出てくる。
smry = r.summary(ret)

ま、マニュアルしっかり見れば実は書いてあることもあるわけですが、
正直、自分も「もっと直感的に使えるようにしてくれ。Pythonなんだし。」
とか、おもうてしまいます。

いじょ。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2007年05月27日 20:45