如何使用 R stopifnot 将粘贴用作消息?

How paste be used as a message with R stopifnot?

提问人:matt 提问时间:11/7/2023 更新时间:11/7/2023 访问量:31

问:

我想使用 报告依赖于变量的消息。使用正常语法而不是逐字字符串,它会给出错误。可以这样做吗?stopifnotpaste

# As expected
stopifnot("a msg" = NULL)

# Fails
stopifnot(paste("a", "a msg") = NULL)

# Fails
msg = paste("a", "a msg")
stopifnot(msg = NULL)
r 错误处理

评论


答:

2赞 r2evans 11/7/2023 #1

两个选项:

  1. 使用和计算表达式的命名列表:do.call

    do.call(stopifnot, setNames(list(1 == 1, 1 == 2), paste("msg", c("A", "B"))))
    # Error: msg B
    
  2. 不要使用 named-expression,直接处理它:

    if (!isTRUE(1 == 2)) stop("msg B", call. = FALSE)
    # Error: msg B
    

    (虽然我怀疑你是在试图坚持 's 命名的便利。stopifnot