在case_when()

时间:2018-08-29 21:51:11

标签: r dplyr mutate

我在case_when()内有一个mutate(),如果条件TRUE得到满足,我希望R停止并抛出错误。这是出于调试目的。

例如,mtcars $ cyl的值为4、6或8。在第四行中有了适当的解决方案后,它应该可以正确运行:

mtcars %>%
  mutate(test = case_when(
    cyl > 3 ~ "ok",
    TRUE ~ # code for throwing error here
  ))

这应该引发错误:

mtcars %>%
  mutate(test = case_when(
    cyl < 3 ~ "ok",
    TRUE ~ # code for throwing error here
  ))

我尝试了stop,但这会触发异常,即使从未实现TRUE

1 个答案:

答案 0 :(得分:1)

据我所知,您无法在case_when调用中做到这一点,因为所有RHS都将被预先评估以确保它们属于同一类型。

但是您可以这样做:

mtcars %>%
  mutate(test = case_when(
    cyl > 3 ~ "ok",
    TRUE ~ NA_character_
  ),
  test=if (anyNA(test)) stop() else test
  )

mtcars %>%
  mutate(test = case_when(
    cyl > 3 ~ "ok",
    TRUE ~ "STOP_VALUE"
  ),
  test=if ("STOP_VALUE" %in% test) stop() else test
  )