在 python 中创建数据框,将其作为参数传递给 R 中的函数,但无法访问数据框列。使用 RPy2

Creating Dataframe in python, passing it as parameter to function in R, but the dataframe columns aren't accessable. Using RPy2

python函数中的输入值如下。 input_X 转换为字典,每次迭代时键存储为“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 数据帧:

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”列不存在的错误。 那么解决这个问题的正确方法是什么?

您的代码中有两个问题。首先,您需要先将 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)

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