在python中创建Dataframe,将其作为参数传递给R中的函数,但是dataframe列不可访问。使用RPy2

时间:2017-02-24 07:05:09

标签: python r dataframe rpy2

python函数中的输入值如下所示。 input_X转换为dict,每次迭代时存储为“0”和“1”的键(在R中访问)。

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 Dataframe:

RX = robjects.DataFrame(X)

它调用R函数:

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

现在来到R:

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

出现“1”列不存在的错误。 那么采用这种方法的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您的代码中有两个问题。首先,您需要先将python数组转换为R整数向量。 E.g:

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)

其次,请注意这会打印X0和X1,而不是0和1,因为列名不能以构造函数中没有check.names = F的数字开头(但是这个参数在Rpy2中不存在) DataFrame功能)。