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