所以我试图编写一个打印错误消息的函数,但仅在用户第一次调用函数时。如果他们打开R,加载库,并调用该函数,它将打印一条警告消息。如果他们再次调用该函数,则不会打印此警告消息。如果他们关闭R并执行相同的过程,它将打印第一个呼叫的警告消息而不是第二个呼叫。我理解R中基本警告()函数的想法,但我没有在帮助文件中看到这种情况的任何文档。有没有人知道可以与warning()函数一起使用的函数或条件能够解决这个问题吗?谢谢!我正在开展一个项目,在这个项目中,负责教授需要这样做以获得某种版权的东西,他希望这样做。
答案 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)
许多软件包都会弹出消息,因为有一种机制可以检测第二次加载对library
或require
的进一步调用是否会被忽略。他们经常使用.onLoad(libname, pkgname)
。参见
?.onLoad