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”列不存在的错误。 那么采用这种方法的正确方法是什么?
答案 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功能)。