R函数返回值以及警告消息
问题描述:
我调用了其他的lib函数,它执行计算并抛出警告消息。我尝试使用tryCatch()来捕获消息,但不知道如何保留计算值和警告消息。这里是示例(简化)代码,我希望mydiv函数具有计算值和警告消息。现在mydiv调用将返回除法值或警告,但不是两者。R函数返回值以及警告消息
mydiv = function(x, y){
tryCatch({
# raise warning message
if (x > y)
warning("throw a warning")
# function calc result
x/y
},
warning = function(war) {
flag = paste("DIV Warning:", war$message)
return (flag)
},
error = function(err) {
flag = paste("DIV Err", err)
return (flag)
})
}
如果我称X = mydiv(2,1),然后x具有值 “DIV警告:抛出一个警告”;如果x = mydiv(2,4),则x:[1] 0.5。 所以我的问题是:1.使用tryCatch:如果可能的话如何返回计算的值和警告消息; 2.是否有更好的方法从函数中获取两个值。
答
你可以使用内置的预警功能,如下:
mydiv = function(x, y){
if (x > y)
warning("throw a warning")
# function calc result
return(x/y)
}
如果你想返回一个警告而不是发射它作为一个警告信息,您可以返回命名列表,其中警告如果没有警告产生,则列表中的条目将为NA:
mydiv = function(x, y){
warn <- NA
if (x > y)
warn <- "throw a warning"
# function calc result
return(list(value=x/y, warning=warn))
}