【问题标题】:R Functions: Print Warning Only on First Call of FunctionR函数:仅在第一次调用函数时打印警告
【发布时间】:2014-07-17 19:47:58
【问题描述】:

所以我正在尝试编写一个打印错误消息的函数,但仅在用户第一次调用该函数时。如果他们打开 R、加载库并调用该函数,它将打印一条警告消息。如果他们再次调用该函数,它将不会打印此警告消息。如果他们关闭 R 并执行相同的过程,它将打印第一次调用的警告消息,而不是第二次调用。我理解 R 中基本的 warning() 函数的想法,但我在帮助文件中没有看到任何关于这种情况的文档。有谁知道可以与能够解决此问题的 warning() 函数一起使用的函数或条件?谢谢!我正在做一个项目,负责教授需要这个来处理某种版权问题,他希望它是这样的。

【问题讨论】:

  • 你为什么要这样做。如果您解释您的理由,我们或许可以提出更好的方法来实现您的目标。
  • @Dason 在我的情况下,我想显示一条消息 just 以确保用户知道某些事情(他们几乎肯定会知道,但这会很糟糕如果他们不是)。因此我不想纠缠他们(让他们知道一次)

标签: r function warnings


【解决方案1】:

执行此操作的一个包是quantmod。当您使用 getSymbols 函数时,它会警告您即将更改默认值。它使用options 这样做。

"getSymbols" <- function(Symbols=NULL,...) {
  if(getOption("getSymbols.warning4.0",TRUE)) {
    # transition message for 0.4-0 to 0.5-0
    message(paste(
            '    As of 0.4-0,',sQuote('getSymbols'),'uses env=parent.frame() and\n',
            'auto.assign=TRUE by default.\n\n',
            'This  behavior  will be  phased out in 0.5-0  when the call  will\n',
            'default to use auto.assign=FALSE. getOption("getSymbols.env") and \n',
            'getOptions("getSymbols.auto.assign") are now checked for alternate defaults\n\n',
            'This message is shown once per session and may be disabled by setting \n',
            'options("getSymbols.warning4.0"=FALSE). See ?getSymbol for more details'))
    options("getSymbols.warning4.0"=FALSE) 
  }
  #rest of function....
}

因此他们检查名为“getSymbols.warning4.0”的选项,如果未找到则默认为 TRUE。然后如果没有找到,它们会显示一条消息(您可能会显示一条警告),然后将该选项设置为 FALSE,以便下次不会显示该消息。

【讨论】:

    【解决方案2】:

    许多包都有弹出消息,因为有一种机制可以检测第二次尝试加载对libraryrequire 的进一步调用,因此会被静默忽略。他们经常使用.onLoad(libname, pkgname)。见

    ?.onLoad
    

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 2020-01-29
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2018-12-29
      • 1970-01-01
      相关资源
      最近更新 更多