2012-11-02 32 views
1

我想压制警告。但是下面的代码不会抑制警告。构建一个嵌入r代码的函数rpy2

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

回答

0

当rpy2 suppressWarnings(kstest(x, y))做时,呼叫kstest(x, y)首先计算(并产生警告),然后返回的结果被传递给suppressWarnings()

发生了什么事是R的suppressWarning()将通过作为参数传递的调用生成的警告置于无声状态。这是可能的,因为在R中参数仅在函数体中需要时才被评估;与Python有显着的不同。

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