[追記] PypeR は2014年の1.1.2を最後に更新されていないようです。PypeR のサイト もリンク切れになっています。そろそろ rpy2 に乗り換えるほうがよさそうです。
Python から R を使うには PypeR(パイパー)というライブラリが便利です(ほかに rpy2 というライブラリもあります)。PypeR は pip install pyper
でインストールできます。
In [ ]: import pyper
In [ ]: r = pyper.R() # Rのインスタンスを作る
In [ ]: r('sin(pi/4)') # Rにコマンドを送る(出力が見にくい)
Out[ ]: 'try({sin(pi/4)})\n[1] 0.7071068\n'
In [ ]: print(r('sin(pi/4)')) # これのほうが見やすい
try({sin(pi/4)})
[1] 0.7071068
In [ ]: r.assign('x', [i for i in range(10)]) # Rのオブジェクトに代入
In [ ]: print(r('x^2'))
try({x^2})
[1] 0 1 4 9 16 25 36 49 64 81
In [ ]: r('y = x^2')
Out[ ]: 'try({y = x^2})\n'
In [ ]: r.get('y') # RのオブジェクトをPythonに持ってくる
Out[ ]: array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])
In [ ]: r("curve(x^2, -2, 2)") # これでは表示できない
Out[ ]: 'try({curve(x^2, -2, 2)})\n'
In [ ]: r('png("hoge.png"); curve(x^2, -2, 2); dev.off()') # 画像ファイル出力
Out[ ]: 'try({png("hoge.png"); curve(x^2, -2, 2); dev.off()})\npdf \n 2 \n'
In [ ]: !open hoge.png # Macならこれで画像ファイルを表示できる
Jupyter Notebook なら次のようにすればカレントディレクトリの画像ファイルをブラウザにインライン表示できます:
from IPython.display import Image
Image('hoge.png')
逆に R から Python を使うには reticulate パッケージを使います。
R で reticulate を使って R のオブジェクトを Python の npy 形式または npz 形式で保存することができます(参考:Using reticulate to read and write NumPy files):
library(reticulate)
np = import("numpy")
np$savez("data.npz", x=x, y=y)
Python 側での読み込みは次の通りです:
import numpy as np
data = np.load("data.npz")
data.files # ['y', 'x']
data['x']
data['y']
逆に Python からの保存:
np.savez("data.npz", x=x, y=y)
R での読み込み:
data = np$load("data.npz")
data["files"] # "y" "x"
data["x"]
data["y"]
Last modified: