【发布时间】:2010-12-14 00:20:37
【问题描述】:
我正在尝试使用 Python 2.6.5 和 R 10.0 通过 RPY2 运行 rpart。
我在 python 中创建了一个数据框并将其传递,但我收到一条错误消息:
Error in function (x) : binary operation on non-conformable arrays
Traceback (most recent call last):
File "partitioningSANDBOX.py", line 86, in <module>
model=r.rpart(**rpart_params)
File "build/bdist.macosx-10.3-fat/egg/rpy2/robjects/functions.py", line 83, in __call__
File "build/bdist.macosx-10.3-fat/egg/rpy2/robjects/functions.py", line 35, in __call__
rpy2.rinterface.RRuntimeError: Error in function (x) : binary operation on non-conformable arrays
谁能帮我确定我做错了什么来抛出这个错误?
我的代码的相关部分是这样的:
import numpy as np
import rpy2
import rpy2.robjects as rob
import rpy2.robjects.numpy2ri
#Fire up the interface to R
r = rob.r
r.library("rpart")
datadict = dict(zip(['responsev','predictorv'],[cLogEC,csplitData]))
Rdata = r['data.frame'](**datadict)
Rformula = r['as.formula']('responsev ~.')
#Generate an RPART model in R.
Rpcontrol = r['rpart.control'](minsplit=10, xval=10)
rpart_params = {'formula' : Rformula, \
'data' : Rdata,
'control' : Rpcontrol}
model=r.rpart(**rpart_params)
cLogEC和csplitData这两个变量是浮点型的numpy数组。
另外,我的数据框如下所示:
In [2]: print Rdata
------> print(Rdata)
responsev predictorv
1 0.6020600 312
2 0.3010300 300
3 0.4771213 303
4 0.4771213 249
5 0.9242793 239
6 1.1986571 297
7 0.7075702 287
8 1.8115750 270
9 0.6020600 296
10 1.3856063 248
11 0.6127839 295
12 0.3010300 283
13 1.1931246 345
14 0.3010300 270
15 0.3010300 251
16 0.3010300 246
17 0.3010300 273
18 0.7075702 252
19 0.4771213 252
20 0.9294189 223
21 0.6127839 252
22 0.7075702 267
23 0.9294189 252
24 0.3010300 378
25 0.3010300 282
公式如下:
In [3]: print Rformula
------> print(Rformula)
responsev ~ .
【问题讨论】:
-
R 中的数据框是列表。也许您应该将数组传递给数组或矩阵?
-
我尝试传递矩阵,但这也引发了错误。有趣的是,如果我用 r.plsr 代替 r.rpart,它可以正常工作,并且 rpart 和 plsr 都说他们想要数据作为 data.frame....