бросить ошибку внутри case_when () - PullRequest
0 голосов
/ 30 августа 2018

У меня есть case_when() внутри mutate(), и я бы хотел, чтобы R остановился и выдал ошибку, если условие TRUE выполнено. Это для отладки.

Например, значения для 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 голосов
/ 30 августа 2018

Насколько я понимаю, вы не можете сделать это в вызове 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
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...