从字符串转换为逻辑产生NA时如何使警告明确

时间:2018-07-05 15:46:19

标签: r function

我正在编写一个将值强制转换为NA时捕获转换错误的函数。基本转换函数似乎在返回警告时不一致。

> as.numeric("a")
[1] NA
Warning message:
NAs introduced by coercion 

但是,转换为逻辑时不显示警告:

> as.logical("a")
[1] NA

我的问题:当无法将字符串转换为逻辑字符串时,有没有办法使警告明确?

我调查了rlang::as_logical(),但它返回一个错误而不是警告,如果可能的话,我想避免。

2 个答案:

答案 0 :(得分:2)

您可以使用options(warn =。例如:

options(warn=1, error=NULL)

得到警告。

我通常会通过对代码相关部分的错误提出警告来解决这个问题。

例如:

options(warn=2, error=NULL)
as.logical(x)
  

错误:(列表)对象无法强制输入“逻辑”类型

您也可以像这样options(warn=0, error=NULL)

轻松重置它

相关:Breaking loop when "warnings()" appear in R

答案 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