有没有办法抛出错误而不是警告?

问题描述 投票:0回答:1

我正在编写我们正在开发的包的测试脚本,但我有点陷入困境。 我有一个需要多个公式的函数(我不会详细介绍..),并且想要测试当公式具有无效协变量时该函数是否可以返回错误。具体来说,我陷入了这种情况,其中协变量是一个因子但平方(我知道它不起作用)。

简单的例子

xxx <- function(formula){
  ....
}

n <- as.factor(1:3)
formula <- ~ I(n ^ 2)
xxx(n)

这会返回一个警告

Warning message:
In Ops.factor(n, 2) : ‘^’ not meaningful for factors

就是因为这个

> I(n ^ 2)
[1] NA NA NA
Warning message:
In Ops.factor(n, 2) : ‘^’ not meaningful for factors

但是因为 I(n^2) 返回带有警告而不是错误的 NA,所以函数在无法使用 NA 进行处理的意外位置返回错误。

任何人都可以帮助我进行 I(n^2) 评估,以在参数无效(本例为因子)时停止并返回错误,而不是给出 NA 和警告消息?

此外,该函数是更大函数的一部分,因此

formula
参数采用
~ + xxx + yyy
的形式。

r warnings radix
1个回答
0
投票
fac <- factor(1:3)
fac ^ 2
#Warning message:
#In Ops.factor(fac, 2) : ‘^’ not meaningful for factors

#turn all warnings into errors
globalCallingHandlers(warning = stop)
fac ^ 2
#Error in Ops.factor(fac, 2) : ‘^’ not meaningful for factors
globalCallingHandlers(NULL)

#only turn warnings for specific call into errors
tryCatch(fac ^ 2, warning = \(w) stop(w))
#Error in Ops.factor(fac, 2) : ‘^’ not meaningful for factors
© www.soinside.com 2019 - 2024. All rights reserved.