在R Studio中用as.logical输出并打印,为何结果为NA NA TRUE?
关于as.logical返回NA NA TRUE的原因及单独检查表现
嘿,这个场景我太熟悉啦!咱们一步步来捋清楚:
为什么会得到NA NA TRUE?
as.logical()函数的转换规则非常严格,只有特定输入能被解析为逻辑值,其他情况都会返回NA:
- 如果你的输入是字符向量:只有
"TRUE"(不区分大小写,比如"true"也可以)、"FALSE"(同理"false")能被正确转换,其他任何字符串都会返回NA。比如运行:
就会输出as.logical(c("我是无效字符", "another_bad_value", "TRUE"))NA NA TRUE,完美匹配你遇到的结果。 - 如果你的输入是数值向量:0会被转为
FALSE,非0数值转为TRUE,NA则保持NA。比如as.logical(c(NA, NA, 5))也会得到同样的输出。 - 如果是因子向量:会基于因子的底层字符值来转换,规则和字符向量一致。
单独检查每个元素会发生什么?
咱们逐个对应来看:
- 针对前两个返回
NA的元素:单独转换时,比如运行as.logical("我是无效字符"),R会返回NA,同时抛出警告信息:Warning message: In as.logical("我是无效字符") : 强制转换时产生了NA,明确告诉你这个值无法被解析为逻辑值。 - 针对第三个返回
TRUE的元素:单独转换时,比如as.logical("TRUE")或者as.logical("true"),都会直接返回TRUE;如果是"FALSE"则返回FALSE,没有任何警告。
总结一下:as.logical()只认明确的逻辑值标识,其他输入一律返回NA,单独检查时无效输入会带着警告返回NA,有效输入则正常输出对应的逻辑值~
内容的提问来源于stack exchange,提问作者sr_sr
相关产品推荐
相关产品推荐

