【问题标题】:How to print an argument of a function when it fails?函数失败时如何打印函数的参数?
【发布时间】:2021-12-01 15:16:06
【问题描述】:

当函数sum() 失败时,我正在尝试使用possibly() 将参数x 打印为消息。

library(purrr)
t <- function(x) {
  p <- possibly(sum, otherwise = message(x))
  p(x)
}

但是,我不希望以下内容检索任何消息,因为 sum() 不会失败:

> t(1)
1
[1] 1

相反,下面的脚本按预期工作:sum() 失败,因此t() 打印消息“a”

> t('a')
a
NULL

【问题讨论】:

    标签: r purrr


    【解决方案1】:

    如另一个答案中所述,possibly 只是做了一些与您想要的完全不同的事情。

    你想要的是tryCatch(基础R的一部分):

    t <- function(x) {
      tryCatch(sum(x), error = function (.) message(x))
    }
    
    t(1)
    # [1] 1
    t('a')
    # a
    

    【讨论】:

      【解决方案2】:

      函数purrr::possibly 的参数otherwise 是一个值,但message(x) 是一个R 表达式。根据文档:

      这些函数包装了函数,以便而不是通过打印输出、消息、警告和错误产生副作用,而是返回增强的输出。

      【讨论】:

        猜你喜欢
        • 2020-04-03
        • 2019-11-14
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 2014-07-14
        • 2016-02-26
        • 1970-01-01
        相关资源
        最近更新 更多