1

我想压制警告。但以下代码不会抑制警告。

import rpy2.robjects as robjects

kstest=robjects.r['ks.test']

suppressWarnings=robjects.r['suppressWarnings']

x=robjects.IntVector([1, 2, 3])
y=robjects.IntVector([1, 2, 4, 5])

result=suppressWarnings(kstest(x, y))
print result
print result[1][0]

如果我可以像在 rpy2 中那样构造一个函数并调用该函数,我认为可以抑制警告。

f=function(x, y) {
    suppressWarnings(kstest(x, y))
}

但我在 rpy2 文档中找不到示例。有人有一些例子吗?

4

1 回答 1

0

在 rpy2 中执行时,首先评估suppressWarnings(kstest(x, y))调用kstest(x, y)(并生成警告),然后将返回的结果传递给suppressWarnings().

正在发生的事情是 R 的suppressWarning()静音警告由作为参数传递的调用生成。这是可能的,因为在 R 中,参数仅在函数体中需要它们时才被评估;与 Python 的显着差异。

用 rpy2 模仿的方法是构造一个未评估的调用并将其传递给suppressWarning(),或者按照您的建议将调用推送到 R 并创建一个将包装调用的 R 函数。该文档显示了如何将字符串评估为 R 代码,并带有一个函数示例。

于 2012-11-02T14:08:53.017 回答