我需要返回"尝试错误"继承自它的类或同一个类。是否有可能在R?
那么,是否可以创建这样的函数:
Foo <- function(x)
{
if (x != 2) { res <- 1 }
else { res <- # create object with class type "try-error" and message "I hate 2!"/ }
return(res);
}
答案 0 :(得分:4)
在R中,类是一个非常宽松的概念;您可以在对象的class
属性中将所需的任何类指定为字符串。例如,使用structure
函数:
Foo <- function(x) {
if (x != 2) {
res <- 1
} else {
res <- structure(
"message",
class = c("try-error", "character")
)
}
res
}
Foo(1)
# [1] 1
Foo(2)
# [1] "message"
# attr(,"class")
# [1] "try-error" "character"
class(Foo(2))
# [1] "try-error" "character"
或者,您可以使用
res <- "message"
class(res) <- c("try-error", class(res))
取代structure
。
添加新类通常是一个好主意,而不是完全覆盖旧类,以便方法调度合理地工作,但根据您的使用情况,这可能不需要或不需要。
答案 1 :(得分:1)
为什么不使用try
?
Foo <- function(x)
{ res <- try({
if (x == 2L) stop("I hate 2!", call. = FALSE)
1
})
res
}
Foo(2)
#Error : I hate 2!
#[1] "Error : I hate 2!\n"
#attr(,"class")
#[1] "try-error"
#attr(,"condition")
#<simpleError: I hate 2!>
我无法找到一个很好的理由,为什么你要创建一个类的对象&#34;尝试错误&#34;手动