为什么R中的表达式为TRUE(3)且isTRUE(NA)为false?

时间:2018-05-10 04:04:48

标签: r

由于R中的所有0以外的值都被视为真,因此isTRUE(3)应逻辑评估为True,但它不是。为什么这样? 另外,我想知道isTRUE(NA)被评估为false的原因。

2 个答案:

答案 0 :(得分:3)

直接从文档(尝试?isTRUE

isTRUE(x)是相同(TRUE,x)的缩写,当且仅当x是长度为一的逻辑向量时才是如此,其唯一元素为TRUE且没有属性(不均匀)名)。

它不只是检查价值,而是进行检查以确保它是合乎逻辑的值。

我知道在计算机科学中经常0是假的,任何非零都是正确的,但R从统计学的角度来看,而不是计算机科学的观点,所以它对定义更加严格

说到这一点,你会注意到这个if语句评估你想象的方式

if(3){print("yay")}else{print("boo")}

这就是R进行评估的方式。函数isTRUE更具体。

还要注意这些行为

FALSE == 0是真的 TRUE == 1是真的 TRUE == 3是假的

因此,当执行这些类型的评估时,R将分别将0和1视为false和true。

我不确定你的计划实现是什么(如果有的话),但它可能更好地试图准确了解R中的布尔逻辑,或事先测试一下。

至于NA,更奇怪的行为。

TRUE & NA等同于NA TRUE | NA等同于TRUE

在这些情况下,R强制NA为逻辑类型,因为任何或者TRUE为TRUE都是TRUE,它可以等同于此。但是值会根据和操作中的第二项而改变,因此它返回NA。

至于你的特定情况,再次将isTRUE(NA)等同为假,因为NA不是长度为一的逻辑向量,其唯一元素为TRUE。

答案 1 :(得分:0)

因为此功能绕过了R的自动转换规则,并检查x 字面上为TRUE或FALSE。

相关问题