如何在R中使用assertr::verify时获得更有信息的断言?


meses <- c("A", "B", "C")
tibble::tibble(
mes = c("A", "b", "C")
) %>% 
assertr::verify(mes %in% meses)

消息来自verify。它是正确的,因为它说错误的索引,但在value列没有显示mes列从tibble的值,所以我必须寻找行。

verb redux_fn      predicate column index value
1 verify       NA mes %in% meses     NA     2    NA

所需输出

verb redux_fn      predicate column index value
1 verify       NA mes %in% meses     NA     2    b

我们可以使用assert返回'value'

library(assertr)
library(tibble)
tibble(mes = c("A", "b", "C")) %>% 
assert(function(x)  x %in% meses, mes)
Column 'mes' violates assertion 'function(x) x %in% meses' 1 time
verb redux_fn                predicate column index value
1 assert       NA function(x) x %in% meses    mes     2     b

对于verify,error_fun的默认选项是error_stop。如果我们可以改变默认选项,它应该可以工作

tibble::tibble(
mes = c("A", "b", "C")
) %>% 
assertr::verify(mes %in% meses, 
error_fun = function(errors, data = .) 
{
errors[[1]]$error_df$value <- .$mes[errors[[1]]$error_df$index]
errors[[1]]
})

与产出

verification [mes %in% meses] failed! (1 failure)
verb redux_fn      predicate column index value
1 verify       NA mes %in% meses     NA     2     b

最新更新