来自
?options
,warn
的描述说
如果发出了 10 个或更少的警告,则会打印它们,否则会显示一条消息,说明发出了多少个警告。
因此,如果警告超过 10 条,它们将被压缩为 1 条消息。例如:
f <- function() {
warning("warn 1")
warning("warn 2")
warning("warn 3")
warning("warn 4")
warning("warn 5")
warning("warn 6")
warning("warn 7")
warning("warn 8")
warning("warn 9")
warning("warn 10")
warning("warn 11")
return(1)
}
f()
[1] 1
有 11 个警告(使用 warnings() 查看它们)
如何将 10 的限制减少到 1? IE。即使我只有一个警告,我也希望它能显示出来
有 1 个警告(使用 warnings() 查看它们)
找不到全局降低此阈值的选项。相反,您可以使用包装函数在需要时总结警告。
> f <- \(n) {
+ replicate(n, warning('foo'))
+ return(1)
+ }
>
> W <- function(FUN) {
+ n <- 0
+ res <- withCallingHandlers({
+ FUN
+ }, warning = function(w) {
+ wrn <- warnings()
+ n <<- n + length(wrn)
+ invokeRestart("muffleWarning")
+ })
+ more <- (n > 1L) + 1L
+ msg <- sprintf('There %s %s warning%s (use warnings() to see %s)',
+ switch(more, 'was', 'were'),
+ n,
+ switch(more, '', 's'),
+ switch(more, 'it', 'them')
+ )
+ message('Warning: ', msg)
+ res
+ }
> W(f(1))
Warning: There was 1 warning (use warnings() to see it)
[1] 1
> W(f(11))
Warning: There were 11 warnings (use warnings() to see them)
[1] 1