R功能:仅在首次调用功能时打印警告

时间:2014-07-17 19:47:58

标签: r function warnings

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

2 个答案:

答案 0 :(得分: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,以便下次不显示该消息。

答案 1 :(得分:0)

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

?.onLoad