覆盖R中其他包的错误消息
我想在R中创建自己的错误消息,以覆盖另一个包中的错误消息。下面是一个简单的reprex:覆盖R中其他包的错误消息,r,error-handling,package,try-catch,grepl,R,Error Handling,Package,Try Catch,Grepl,我想在R中创建自己的错误消息,以覆盖另一个包中的错误消息。下面是一个简单的reprex: myfunc <- function(x,y,string=TRUE){ if(string){ x+y }else{ print("not numeric") } } myfunc(2,"yes") 我想用我自己的特定于我的包的错误消息,例如,您是否忘记使用string=TRUE?,将x+y:non-numeric参数中的
myfunc <- function(x,y,string=TRUE){
if(string){
x+y
}else{
print("not numeric")
}
}
myfunc(2,"yes")
我想用我自己的特定于我的包的错误消息,例如,您是否忘记使用string=TRUE?
,将x+y:non-numeric参数中的错误改写为二进制运算符。我已经在函数中实现了tryCatch
和grepl
,并且它可以工作,但我不确定这是否是最好的方法:
myfunc <- function(x,y,string=TRUE){
tryCatch(myfunc(x,y),
error=function(err){
if (grepl("non-numeric", err$message)) {
stop("Did you forget to use string=TRUE?")
}
})
if(string){
x+y
}else{
print("not numeric")
}
}
myfunc(2,"yes")
这就是我想要的,尽管我更希望它没有说值错误[[3L]](cond)
。有没有办法摆脱它?此外,这是覆盖错误消息的最佳方法,还是有其他更好的方法?而不是停止
可能使用消息
myfunc <- function(x,y,string=FALSE){
if(!string){
tryCatch(x+y, error = function(err) {
if (grepl("non-numeric", err$message)) {
message("Error : Did you forget to use string=TRUE?")
}
})
}else{
print("not numeric")
}
}
myfunc(2,"yes")
#Error : Did you forget to use string=TRUE?
myfunc(2,4)
#[1] 6
myfunc(2,"yes", string = TRUE)
#[1] "not numeric"
myfunc这是可行的——但现在它还将默认错误消息打印出来:x+y中的错误:非数值参数到二进制运算符
。关于如何隐藏它有什么想法吗?它不会为我打印默认消息。它只打印错误:您忘记使用string=TRUE了吗?
。你在控制台上运行我的函数了吗?哦,我看到你改变了不止一件事。我现在正在跟踪,它确实起了作用。然而,当我运行myfunc(2,“yes”,string=TRUE)
时,我仍然得到错误:您是否忘记使用string=TRUE?
是,这是因为string
仍然是TRUE
。我认为你需要一个不同于你在你的职位上的逻辑。如果我的答案更接近你想要的,请查看我的更新答案。啊,是的,谢谢。不幸的是,这在这个例子中效果很好,但在我的函数中效果不好(我认为我把它简化得太多了)。不过,这给了我很多工作要做,所以,谢谢你!!
Error in value[[3L]](cond) : Did you forget to use string=TRUE?
In addition: There were 50 or more warnings (use warnings() to see the first 50)
Called from: value[[3L]](cond)
myfunc <- function(x,y,string=FALSE){
if(!string){
tryCatch(x+y, error = function(err) {
if (grepl("non-numeric", err$message)) {
message("Error : Did you forget to use string=TRUE?")
}
})
}else{
print("not numeric")
}
}
myfunc(2,"yes")
#Error : Did you forget to use string=TRUE?
myfunc(2,4)
#[1] 6
myfunc(2,"yes", string = TRUE)
#[1] "not numeric"