rpy2でpythonからRを叩く
Rでテンソル分解ツール作っちゃったので、pythonからRを使う。
Rだけで良かった説はある。
導入
brew install R pip install rpy2
使い方
- Rのデフォ関数を呼ぶ
import rpy2.robjects as ro #ro.rはRとの接続チャンネル r = ro.r matrix = r['matrix']
>>> print matrix(0,3,4) [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 0 0 0 0
- Rのソースコードを読み込む
#/tmp/source_code.Rを読み込む r("source('/tmp/source_code.R')") #function_name関数をfuncに格納 func = r['function_name']
- Rにデータを渡す
array = r['array'] ro.globalenv['tmp'] = array(range(2*3*2),[2,3,2]) #vectorはIntVectorで渡す #VectorだとRの中でlistになっておかしくなる v = ro.IntVector([2,3,4])
>>> print ro.globalenv['tmp'] , , 1 [,1] [,2] [,3] [1,] 0 2 4 [2,] 1 3 5 , , 2 [,1] [,2] [,3] [1,] 6 8 10 [2,] 7 9 11 >>> print v [1] 2 3 4
- 行名、列名をつける
matrix = r['matrix'] list = r['list'] data = matrix(0,3,4) data.names = list(['a','b','c'],['z','y','x','w'])
>>> print data z y x w a 0 0 0 0 b 0 0 0 0 c 0 0 0 0