返回一条错误消息,而不是在R中抛出的最后一条

返回一条错误消息,而不是在R中抛出的最后一条,r,error-handling,assertthat,R,Error Handling,Assertthat,我有两个函数构造Rs3对象。一个对象封装另一个对象。当用户将错误的num参数传递给fun2()时,它会在fun2()中抛出错误断言。我认为用户在fun1()中看到消息会更有帮助。保存在fun1()中引发的消息以及引发该消息而不是在fun2()中引发的消息的选项有哪些 在评论中回答了这个问题 这是因为函数参数的延迟计算force(num)将更改行为并计算第一个构造函数。快速修复方法是在fun2@Aurèle的主体开头添加force(num),谢谢!添加该选项将导致预期的错误消息 fun1 <

我有两个函数构造Rs3对象。一个对象封装另一个对象。当用户将错误的
num
参数传递给
fun2()
时,它会在
fun2()
中抛出错误断言。我认为用户在
fun1()
中看到消息会更有帮助。保存在
fun1()
中引发的消息以及引发该消息而不是在
fun2()中引发的消息的选项有哪些

在评论中回答了这个问题


这是因为函数参数的延迟计算
force(num)
将更改行为并计算第一个构造函数。

快速修复方法是在
fun2
@Aurèle的主体开头添加
force(num)
,谢谢!添加该选项将导致预期的错误消息
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))