如何使用rpy2在两个列表上执行Wilcox测试而不会出现错误:“不够(有限)'x'观察”

时间:2012-11-29 05:04:57

标签: r python

我有一些python / rpy2代码支持AB测试,通常在两个浮动值列表(以美元计算的捐款)上成功运行Wilcox测试。但有时会抛出以下错误:

File "/usr/lib/python2.6/dist-packages/rpy2/robjects/__init__.py", line 423, in __call__
res = super(RFunction, self).__call__(*new_args, **new_kwargs)
rinterface.RRuntimeError: Error in wilcox.test.default(numeric(0), numeric(0)) : 
not enough (finite) 'x' observations

这是代码。 rs是mysql查询的结果。金额值均为非零,范围从1到1000 - 但几乎全部为5到50。

a1 = []
a2 = []
r = robjects.r
for row in rs: 
    if row['banner'] == bans[1]:
        a1.append(row['amount'] )
    else:
        a2.append( row['amount'] )
v1 = robjects.FloatVector(a1)
v2 = robjects.FloatVector(a2)
wilcox_result =  r['wilcox.test'](v1, v2) 
print  "Wilcox test of means p= %.6f" % wilcox_result[2][0] # the p-value

它约占我ab测试的60%。但在其余部分给出了这个错误。我没有注意到数据中可能导致错误的任何模式。我找不到关于rpy2的这个错误的任何文档。

1 个答案:

答案 0 :(得分:1)

RRuntimeError异常报告来自R的错误消息。 这是:

  

wilcox.test.default(numeric(0),numeric(0))中的错误:   不够(有限)'x'观察

这意味着在40%的测试中(因为你报告成功率为60%)a1或a2(可能两者都是)没有任何数值(长度为0的向量,你可以使用{{ 1}}跟踪问题,或者所有值都是NAs,Infinite或NaN)