仅接收唯一的警告消息

时间:2017-03-30 09:32:31

标签: r warnings unique

警告信息是我想知道的好消息。但我只是想知道它一次!

因此,此函数会抛出2个不同的警告并重复20次。

如何告诉R只打印唯一的警告。我正在寻找一种肾上腺溶液。

Warning messages:
1: NAs introduced by coercion
2: In sqrt(-1) : NaNs produced

以下是我的例子:

foobar <- function(n=20) {
    for (i in 1:n) {
        as.numeric("b")
        sqrt(-1)
        }
}

foobar()

1 个答案:

答案 0 :(得分:1)

要仅返回唯一的警告字符串,请使用

unique(warnings())

现在,您可能遇到的一个问题是您的函数有超过50个警告,在这种情况下warnings()将无法捕获所有警告。要解决此问题,您可以将选项中的nwarnings增加到例如如help page of warnings中建议的那样10000。

options(nwarnings = 10000)  

示例:

foobar <- function(n=20) {
    warning("First warning")
    for (i in 1:n) {
        as.numeric("b")
        sqrt(-1)
    }
    warning("Last warning")
}

foobar(60)
unique(warnings())
## Warning messages:
## 1: In foobar(60) : First warning
## 2: NAs introduced by coercion
## 3: In sqrt(-1) : NaNs produced

op <- options(nwarnings = 10000)
foobar(60)
unique(warnings())
## Warning messages:
## 1: In foobar(60) : First warning
## 2: NAs introduced by coercion
## 3: In sqrt(-1) : NaNs produced
## 4: In foobar(60) : Last warning

options(op)