我有一个有条件地打印消息/警告的函数,例如:
test <- function(x)
{
for (i in 1:5)
{
if (i == 3)
{
warning("test")
break()
}
if (i != 3)
{
message(i)
}
}
}
该函数正确地跳出索引3并打印警告。
test(1)
1
2
Warning message:
test
但是,当我将该函数封装到lapply
中时,警告消息只在末尾显示:
lapply(1:2, test)
1
2
1
2
[[1]]
NULL
[[2]]
NULL
Warning messages:
1: In FUN(X[[i]], ...) : test
2: In FUN(X[[i]], ...) : test
我如何确保“按循环”打印消息?即
1
2
Warning messages:
1: In FUN(X[[i]], ...) : test
1
2
Warning messages:
1: In FUN(X[[i]], ...) : test
[[1]]
NULL
[[2]]
NULL
1条答案
按热度按时间bq8i3lrv1#
您可以使用
options(warn = 1)
全局设置即时警告。warning()
还有一个immediate.
参数用于特定用途:文档注解:
warning通过(有效地)调用signalCondition来发出警告条件信号。如果没有处理程序或所有处理程序都返回,则使用warn = getOption(“warn”)的值来确定适当的操作。如果warn为否定,则忽略警告;如果为零,则在顶层功能完成之后存储并打印它们;如果是1,则在发生时打印,如果是2(或更大),则将警告转换为错误。调用warning(immediate. = TRUE)将warn〈= 0转换为warn = 1,仅用于此调用。