0

我有一些支持 AB 测试的 python/rpy2 代码,通常成功地在两个浮动值列表(以美元为单位的捐赠)上运行 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

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

4

1 回答 1

1

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

wilcox.test.default(数字(0),数字(0))中的错误:没有足够的(有限)'x'观察

这意味着在 40% 的测试中(因为您报告了 60% 的成功)a1 或 a2(甚至可能两者都有)没有任何数值(长度为 0 的向量,您可以使用它来测试if len(a1)==0 or len(a2)==0以跟踪问题,或所有值都是 NAs、Infinite 或 NaN)

于 2012-11-29T10:23:10.587 回答