R:如何清除所有警告

Roc*_*nce 55 warnings r

我想使用命令行清除warnings()列表.

我试过没有成功

> rm(last.warning, envir = baseenv())  
Error in rm(last.warning, envir = baseenv()) :   
cannot remove variables from the base environment
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Jos*_*ich 100

尝试 assign("last.warning", NULL, envir = baseenv())

  • 我同意这是正确的答案,但我会敦促初级用户在使用这样的命令之前进行思考.这样的用户试图做什么?在修改底层变量之前要认真思考(对于那些C++用户,请考虑"私有").如果您想要一个新的R会话,请开始一个新的R会话.使用这个和rm(list = ls())不会得到你.如果您想要删除不正确但不应解决的警告(你是否_sure_ of this?),那么请考虑在相应的函数上使用suppressWarnings().否则,你可能会错过重要的警告. (6认同)
  • 从 R 版本 4.1.0 开始,现在会抛出错误“分配错误(“last.warning”,NULL,envir = baseenv()):无法将“last.warning”的绑定添加到基本环境”。请参阅下面 @mmaechler 的答案以获得可行的解决方案。 (3认同)
  • 完美答案.. 这有助于在将以前的警告保存到日志或文件后识别进一步的警告。 (2认同)
  • 我明白了:分配错误("last.warning",NULL,envir = baseenv()):无法更改'last.warning'的锁定绑定值 (2认同)
  • 在非香草R平台(即MRO和RRO)上发生错误消息是assign("last.warning"...)错误,因为默认情况下last.warning被锁定.要解锁绑定,请使用unlockBinding("last.warning",baseenv()).此实现与?警告一致,即"如果warn为零(默认值)",则创建只读变量last.warning. (2认同)

bil*_*080 6

看看suppressWarnings()是否阻止警告出现.

请在帮助页面中注明警告:

"....没有记录last.warning存储的位置,也没有显示,这可能会发生变化.在R 2.4.0之前,它存储在工作区中,但不再存在......"

  • Bill,您的第二个链接不适用于没有在其环回接口上的端口22913上运行R-help服务器的任何人. (7认同)
  • 我不认为这是@RockScience 所要求的。他已经堆积了一些警告(并且他已经从它们中提取了我们想要的信息),现在他想要清理“warnings()”。 (4认同)
  • 我看了这个函数,但有时我还是想有警告。我只想在某个时候清理堆栈。 (2认同)

小智 5

我同意,我想使用try()并收集try()生成的警告.

我现在的解决方案是

assign("last.warning", NULL, envir = baseenv())
    myFit  <- try(...)
    warned <- warnings()
assign("last.warning", NULL, envir = baseenv())
Run Code Online (Sandbox Code Playgroud)


Mar*_*ler 5

只是为了强调@Richie Cotton 上面提到的内容(帮助页面现在不再提及 2.4.0,但是):这assign("last.warning", envir = baseenv())确实是不推荐的,尽管它已被这里接受的答案。

相反,您应该使用更强大的错误处理程序工具,特别是对于上面的 @BWMorlan 的情况,您可以使用多次“广告” tryCatch.WE()实用程序函数,该函数捕获所有警告和错误并在没有错误时提供结果

r <- tryCatch.WE({ ... })
Run Code Online (Sandbox Code Playgroud)

在 R 中使用 demo(error.catching) 来获取函数并查看它的运行情况,或者

file.show(system.file("demo/error.catching.R"))
Run Code Online (Sandbox Code Playgroud)

获取评论来源。