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