2017-02-24 7 views
0

Python関数の入力値を以下に示します。 input_Xは、各反復(「R」でアクセスされる)に「0」および「1」として格納されたキーを使用してdictに変換されます。PythonでDataframeを作成し、それをパラメータとして渡してRで機能させますが、データフレーム列にはアクセスできません。 RPy2の使用

Y = [1,1,1,1,1,1,0,0,0,0,0,0] 
input_X = [[3,4,3,4,3,1,5,4,6,7,5,3], [4,5,6,5,4,5,6,7,8,7,8,7]] 
X = {} 
    for i in range(len(input_X)): 
     X[str(i)]=input_X[i] 

XはRのデータフレームに変更:

r(''' 
      source('r_test.r') 
    ''') 
    r_getname = robjects.globalenv['logistic_regression'] 
    x=r_getname(RY,RX) 
    return str(x) 

今すぐRに来る:

RX = robjects.DataFrame(X) 

それはRの関数呼び出し

logistic_regression = function(y,x){ 
    print(x["1"]) 
} 

が列というエラーになります」 1 "は存在しない。 これにアプローチする正しい方法は何ですか?

答えて

1

コードには2つの問題があります。最初に、まずpython配列をRの整数ベクトルに変換する必要があります。例えば:コンストラクタで

import rpy2.robjects as robjects 

Y = [1,1,1,1,1,1,0,0,0,0,0,0] 
input_X = [[3,4,3,4,3,1,5,4,6,7,5,3], [4,5,6,5,4,5,6,7,8,7,8,7]] 
X = {} 
    for i in range(len(input_X)): 
     X[str(i)]=robjects.IntVector(input_X[i]) 

robjects.r(''' 
logistic_regression = function(x){ 
    print(colnames(x)) 
} 
''') 

xr = robjects.DataFrame(X) 
robjects.r.logistic_regression(xr) 

第二に、カラム名はcheck.namesなし番号で始めることができないためではなく、0と1、これはX0およびX1を印刷することに注意= F(ただし、このパラメータが存在しませんRpy2 DataFrame関数で)。

関連する問題