分からんこと多すぎ

何故か就職できたので技術磨く。一人前の多重線形代数使いを目指しつつ、機械学習、データマイニングをやる

rpy2でpythonからRを叩く

Rでテンソル分解ツール作っちゃったので、pythonからRを使う。
Rだけで良かった説はある。

導入

brew install R
pip install rpy2

使い方


  1. 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

  2. Rのソースコードを読み込む

    #/tmp/source_code.Rを読み込む
    r("source('/tmp/source_code.R')")
    
    #function_name関数をfuncに格納
    func = r['function_name']
    

  3. 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

  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