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

在python中创建Dataframe,将其作为参数传递给R中的函数,但Dataframe列不是';无法访问。使用RPy2,python,r,dataframe,rpy2,Python,R,Dataframe,Rpy2,python函数中的输入值如下所示。输入_X转换为dict,每次迭代时键存储为“0”和“1”(在R中访问) 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)

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

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 DataFrame函数中不存在此参数)

代码中有两个问题。首先,您需要首先将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 DataFrame函数中不存在此参数)