PythonからRを利用

PythonからRを利用する。

ライブラリはPypeR(PYthon-piPE-R), RPy2がメジャーなようだが、Google Trendsによると下図の状態なのでPypeRを使う。

スクリーンショット 2014-12-13 21.57.23

 

1. インストール

公式サイトに従って行う。

$ pip3 install PypeR

公式サイトの記述はいたってシンプル。同梱のtest.pyを見ろとのこと。

 

2. 基本的な連携

準備

from pyper import *
r = R()

Rコード実行

r('a <- 1; b <- 2; a + b')

or

r(['a <- 1'], ['b <- 2'], ['a + b'])

値の設定

r['a'] = x

or

r.a = x

値の取得

x = r['a']

or

x = r.b

少し複雑なコードの実行。

val = r['(2*pi + 3:9)/5']

3. 実践

Rのnnet(ニューラルネットワーク)を使ってXOR問題を解く。

from pyper import *
import numpy
r = R()
r('library(nnet)')
data = [[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 0]]
r['xor.data'] = numpy.array(data)
r('xor.data <- data.frame(xor.data)')
r('xor.nnet

XORの場合、過学習を考えるとsoftmaxの方がいい。

上記と同様のRコードは下記。

library(nnet)
xor.data = data.frame(matrix(c(0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0), 4, 3))
xor.nnet <- nnet(X3~., size = 2, decay = 0, data = xor.data)
xor.pred <- predict(xor.nnet, xor.data)
xor.pred

参考