用cli消息实现R函数的'quiet = TRUE'参数的最佳方法是什么?

piah890a  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(151)

我正在尝试为一个R函数实现一个quiet参数,该函数有很多cli消息。
我想像options(suppressMessages(classes = "cliMessage"))这样的东西(它不工作),只用一行代码就可以抑制所有的cliMessage。
大概是这样的

name <- function(variables, quiet = FALSE) {
  
  if(quiet == TRUE){
    
    options......
    
  }
  
  cli::cli_alert_info("example1")
  cli::cli_alert_info("example2")
  cli::cli_alert_info("example3")
  cli::cli_alert_info("example4")
}

创建它的一种详细方法是:

name <- function(variables, quiet = FALSE) {

  if(quiet == TRUE){

  cli::cli_alert_info("example1") %>%
    suppressMessages(classes = "cliMessage")
  cli::cli_alert_info("example2") %>%
    suppressMessages(classes = "cliMessage")
  cli::cli_alert_info("example3") %>%
    suppressMessages(classes = "cliMessage")
  cli::cli_alert_info("example4") %>%
    suppressMessages(classes = "cliMessage")

  }

  cli::cli_alert_info("example1")
  cli::cli_alert_info("example2")
  cli::cli_alert_info("example3")
  cli::cli_alert_info("example4")
}

但是我必须重写所有的函数两次

z9smfwbn

z9smfwbn1#

你有几个选择。
1.告诉你的用户使用suppressMessages(name())来隐藏消息,这也会隐藏来自下游函数和message()的消息。
1.有条件地发送消息:

if (!quiet) cli_alert_info("Up and running!")

1.在函数中设置cli.default_handler选项,然后在on.exit()中恢复该选项:

name <- function(quiet = FALSE) {
   if (quiet) {
     old <- options(cli.default_handler = function(...) { })
     on.exit(options(old), add = TRUE)
   }
   cli::cli_alert_info("Up and running!")
 }

这不仅抑制来自cli的消息,而且抑制来自下游函数(即,来自name中调用的函数)的消息。

相关问题