我正在编写一个将值强制转换为NA时捕获转换错误的函数。基本转换函数似乎在返回警告时不一致。
> as.numeric("a")
[1] NA
Warning message:
NAs introduced by coercion
但是,转换为逻辑时不显示警告:
> as.logical("a")
[1] NA
我的问题:当无法将字符串转换为逻辑字符串时,有没有办法使警告明确?
我调查了rlang::as_logical()
,但它返回一个错误而不是警告,如果可能的话,我想避免。
答案 0 :(得分:2)
您可以使用options(warn =
。例如:
options(warn=1, error=NULL)
得到警告。
我通常会通过对代码相关部分的错误提出警告来解决这个问题。
例如:
options(warn=2, error=NULL)
as.logical(x)
错误:(列表)对象无法强制输入“逻辑”类型
您也可以像这样options(warn=0, error=NULL)
答案 1 :(得分:1)
您可以为此设置自己的功能
as.logical2 <- function(x) {
if (is.na(x)) return(x)
out <- as.logical(x)
#if there is an NA, you can issue a warning
if (is.na(out)) warning('NAs introduced by coercion')
out
}
as.logical2('a')
#[1] NA
#Warning message:
#In as.logical2("a") : NAs introduced by coercion