【发布时间】:2023-03-13 04:37:01
【问题描述】:
dplyr 的mutate() 有异常处理机制吗?我的意思是一种捕获异常并处理它们的方法。
让我们假设我有一个函数在某些情况下会引发错误(在示例中,如果输入为负数),为了简单起见,我定义了该函数,但在现实生活中,它在某些情况下会是一个函数R 包。让我们假设这个函数是矢量化的:
# function throwing an error
my_func <- function(x){
if(x > 0) return(sqrt(x))
stop('x must be positive')
}
my_func_vect <- Vectorize(my_func)
现在,假设我想在mutate() 中使用这个函数。
如果在mutate() 中使用此函数,它将在第一个错误处停止并且不返回任何结果:
library(dplyr)
# dummy data
data <- data.frame(x = c(1, -1, 4, 9))
data %>% mutate(y = my_func_vect(x))
# Error in mutate_impl(.data, dots) : Evaluation error: x must be positive.
在这种情况下,有没有办法捕捉错误并执行某些操作(例如返回 NA),同时获取其他元素的结果?
我期望的结果是使用带有tryCatch() 的循环将实现的结果,即类似于以下内容:
y <- rep(NA_real_, length(data$x))
for(i in seq_along(data$x)) {
tryCatch({
y[i] <- my_func_vect(data$x[i])
}, error = function(err){})
}
y
# Result is: 1 NA 2 4
【问题讨论】:
-
你不是快到了吗?在你的
tryCatch函数中使用error = function(err){NA},我相信它有效。编辑:啊,你当然想在变异中使用它,没关系。 -
请完整阅读我的问题。当函数抛出错误时,该点不返回 NA 。但是在 dplyr 的 mutate() 中执行 tryCatch 机制。
标签: r exception-handling dplyr