构造一个在rpy2中嵌入r代码的函数

时间:2012-11-02 03:12:20

标签: embed rpy2 suppress-warnings

我想抑制警告。但是以下代码不会禁止警告。

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文档中找到示例。有人有一些例子吗?

1 个答案:

答案 0 :(得分:0)

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

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

使用rpy2模仿的方法是构建一个未评估的调用并将其传递给suppressWarning(),或者当你建议将调用推送到R并创建一个将包装调用的R函数。该文档显示了evaluate a string as R code的方法,以及一个带函数的示例。