2012-11-02 67 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,以及一個函數示例。