【发布时间】:2023-03-14 09:53:01
【问题描述】:
有没有办法使用对未包含的行失败的函数在行子集上mutate?
我正在尝试使用my_func,但对于某些值(下面的玩具示例中的5)失败。我可以在某些行而不是其他行上评估此函数,为其他行返回 NA 吗?我尝试使用if_else,但它会评估所有值的函数,导致它失败:
my_func = function(x) {
if (any(x == 5)) stop("Fail!")
return(x + 1)
}
data.frame(value = c(1, 5, 2)) %>%
mutate(result = if_else(value == 5, NA, my_func(value)))
我可以围绕 my_func 构建一个包装器,以删除破坏值,然后在返回之前将这些值插入到 my_func 的返回值中,但这似乎过于复杂。
更新:解决方案不得更改my_func!我最近遇到了这个问题,my_func 是quantreg::predict.rqss。
【问题讨论】:
-
对于 NA 值,您可以显式检查 NA。
if_else(is.na(value) || value == 5, NA, my_func(value))。它失败的其他值有哪些示例? -
@rpolicastro 尝试运行您的建议。它仍然评估
my_func的所有值,因此失败。