rpy2とsoaplibでつくるRのウェブサービス

soaplibにはCherryPyが組み込まれているので簡単にウェブサービスがつくれる。さらにrpy2を使えばRのウェブサービスがお手軽に構築できて便利。

インストールの手順はwikiを参照

以下のコードをsoapr.pyというファイル名で保存する。これは与えた数字の数だけRがrnormして返すという簡単なサービス。

from soaplib.wsgi_soap import SimpleWSGISoapApp
from soaplib.service import soapmethod
from soaplib.serializers.primitive import String, Integer, Array, Float
import rpy2.robjects as robjects

class RService(SimpleWSGISoapApp):

    @soapmethod(Integer,_returns=Array(Float))
    def rnorm(self,num):
        r = robjects.r        
        y = r.rnorm(num)
        return [i for i in y]

if __name__=='__main__':
    from cherrypy.wsgiserver import CherryPyWSGIServer
    server = CherryPyWSGIServer(('localhost',7789),RService())
    server.start()

実行するとサーバが立ち上がりhttp://localhost:7789/soapr.wsdlにアクセスするとwsdlを出力する。

テスト用のクライアント

>>> from soaplib.client import make_service_client
>>> from soapr import RService
>>> client = make_service_client('http://localhost:7789/',RService())
>>> print client.rnorm(5)
[-0.40538156526399999, 0.45889158855099998, -0.67243766066699995, 2.6881017757299999, 0.113257266309]
>>> print client.rnorm(3)
[-0.16610789340500001, 0.66591497139099998, -1.74812066455]

参考

macbookでRpyを利用できるようにしたのでメモ

python2.5,R-2.7.1,rpy1.0.3という組み合わせで。rpy2-alphaはコンパイルが通らなかった。

Rのインストール

Rはソースからコンパイル。enable-R-shlibオプションをつけるのを忘れずに、というより配布されていたバイナリはこれつきでコンパイルされてないようなのでそのままではrpyが入らないはず。

R CMD config --ldflags

とか打つとOKかどうかわかる。 ダメげな場合は潔くソースから。

./configure --enable-R-shlib
make

ここでまた、make installするとshlibがなんかみつからなくなるという現象に悩まされた。そのため、ユーザー領域でコンパイルしたバイナリを使う事にした。/Users/kzfm/R-2.7.1/bin/Rが実体で/opt/local/bin/Rにシンボリックリンクを張って使っている。

Rpyのインストール

export R_HOME=/Users/kzfm/R-2.7.1
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$R_HOME/lib

これが重要。あとmacのgccでもコンパイルできなくてmacportのgcc使ってコンパイルする必要があるかもしれない。

あとは普通に

sudo python setup.py install

でいけるはず。

WindowsでRPyを使う

普段はLinuxマシンでRPyを使うのだけど、手元のLet's NoteR4でも使いたいので。

  • R2.6.1
  • Python2.5.1
  • RPy1.0.1
  • pywin32 build210

pywinはeasy_installで。普通にダウンロードしてクリックからのインストールでもいいような。

easy_install pywin32

RPyはrpy-1.0.1-R-1.3.0-to-2.6.1-Numpy-win32-py2.5.exeを落としてきて入れた。

あと環境変数。R_HOMEがねーとかwin32allがimport出来ないとかいうエラーは環境変数の設定のせい。次の二つを環境変数Pathにセットしておくととりあえず大丈夫。

C:\Program Files\R\R-2.6.1\bin
C:\Python25\Lib\site-packages\pywin32-210-py2.5-win32.egg\pywin32_system32

後者のほうはなんとかならんかね。Pathに設定するようなもんじゃないと思うんだけど。前者もpathでなくてR_HOMEとかにセットできたらいいのにね。