我需要返回「try-error」類或繼承它的相同類。在R中可能嗎?如何在R中創建try-error類
那麼,是不是可以這樣創建功能:
Foo <- function(x)
{
if (x != 2) { res <- 1 }
else { res <- # create object with class type "try-error" and message "I hate 2!"/ }
return(res);
}
我需要返回「try-error」類或繼承它的相同類。在R中可能嗎?如何在R中創建try-error類
那麼,是不是可以這樣創建功能:
Foo <- function(x)
{
if (x != 2) { res <- 1 }
else { res <- # create object with class type "try-error" and message "I hate 2!"/ }
return(res);
}
類是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"
另外,還可以代替structure
使用
res <- "message"
class(res) <- c("try-error", class(res))
。
它通常是一個好主意,添加新類,而不是完全覆蓋舊的類,這樣的方法分派工作得相當,但根據您的使用情況下,這可能並不需要或期望。
爲什麼不使用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!>
我看不出你爲什麼要手動創建類「try-error」的對象的好理由。
謝謝!這就是我需要的! – Dmitriy