RPy2でpythonからRを呼び出して計算(基本〜線形回帰まで)
インストール〜基本操作〜線形回帰まで。
まずはaptでインストール。
sudo aptitude install python2.6-rpy2
ubuntu便利。
パッケージのインポート&rに対するインターフェイスオブジェクトを生成。
基本的にこのオブジェクトを介してRを操る。
import rpy2.robjects as robj r = robj.r
まずRからπの値を取得してみる。
- ()だとRのコードとして評価される。
- []だとRのオブジェクトを取得する。
という点に注意。
print(r('pi')) print(r['pi'])
は.でもある程度代用できるけど、Rの関数・変数名にはちょいちょい.が入ってくるのでを使っておくのが無難。
上述のように()を使えばRのコードを評価できる。
Rの関数オブジェクトを定義してそれを使って値を計算してみる。
#値を2乗する関数 r('f <- function(x_){x_^2}') #返り値はRVector型のオブジェクトになっている。 r['f'](4) #この場合、返り値は1個なので、最初の要素を取得すればpythonの数値型として取得できる r['f'](4)[0]
また[]はR上のオブジェクトを引っ張ってこれるので、
デフォルトで入っている関数も使用することができる。
x = robj.IntVector([1,2,3,4]) rsum = r['sum'] print(rsum(x)) print(r['matrix'](x,nrow=2))
上で書き忘れたが、pythonのリストをRのVectorにするには
x = range(10) rx = robj.IntVector(x)
という感じに書く。その他Float型などなどへの変換関数あり。
デフォルトで使えるcarsのデーターを使って線形回帰を実行してみる。
cars_lm = r['lm'](robj.RFormula("dist~speed"),r['cars'])
これだけでcarsのデータを使った回帰が可能。
RFormulaで数式型に持って行くのを忘れないようにする。文字列だとだめ。
出力結果の属性をチェックして、必要なものを取得するにはこんな感じ。
print(cars_lm.names) #切片&傾きを数値として取得 cars_lm.r['coefficients'][0][1] cars_lm.r['coefficients'][0][0]