Возврат сообщения об ошибке, отличного от последнего, выданного в R - PullRequest
1 голос
/ 06 апреля 2020

У меня есть две функции, которые создают объекты R S3. Один объект инкапсулирует другой. Когда пользователь передает неверный аргумент num в fun2(), он выбрасывает утверждение об ошибке в fun2(). Я думаю, что для пользователя было бы более информативным увидеть сообщение в fun1(). Какие есть варианты для сохранения сообщения, выданного в fun1(), и поднятия его вместо сообщения в fun2()?

fun1 <- function(num) {
  assert_that(num %% 2 == 0, msg = "num should be even")
  structure(num,
      class = "fun1-Class"
  )
}
fun2 <- function(text, num) {
  assert_that(class(num) == "fun1-Class", msg = "Bad Class")
  structure(list(text, num),
    class = "fun2-Class"
  )
}

fun1(1.2)
# Throws error "num should be even"

x <- fun2("myText", fun1(1.2))
# Throws error "Bad Class"

Трассировка ниже

 Error: Bad Class 
3.
stop(assertError(attr(res, "msg"))) 
2.
assert_that(class(num) == "fun1-Class", msg = "Bad Class") 
1.
fun2("text", fun1(1.2)) 

1 Ответ

2 голосов
/ 06 апреля 2020

@ aurèle ответили на это в комментариях.

Это происходит из-за ленивой оценки параметров функции. force(num) изменит поведение и оценит первый конструктор.

...