为什么在R中只有1 == TRUE,true和其他数字均为false?

时间:2020-04-10 22:02:38

标签: r logical-operators

如果if()语句不包含逻辑表达式怎么办?

例如,if-else块if(2){print(“ A”)} else {print(“ B”)})输出A,但是2不是true,因此它应该打印B。为什么?< / p>

2 个答案:

答案 0 :(得分:4)

这是因为在if中,非0的任何值都将被强制为TRUE,而0将为FALSE。

if(2){print("A")}else{print("B")}
#[1] "A"
if(1) print("A")
#[1] "A"

if(0) print("A") else print("B")
#[1] "B"

可以用as.logical

进行检查
as.logical(c(0, 1, 2, -1, 5, 3))
#[1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

此处TRUE将被映射为1,而FALSE将被映射为0(二进制),并且if只能有两种情况,即TRUE或FALSE。


标题中还有一个问题,那就是为什么1== TRUE。原因是TRUE / FALSE在内部为1/0。因此,在==期间将1强制为TRUE或将TRUE强制为1,而其他数字保持不变

答案 1 :(得分:1)

您问两个独立的问题。

首先,标题中的那个问为什么1是唯一测试等于TRUE的数字。比较x == TRUE需要xTRUE属于同一类型。通常,像TRUE这样的逻辑将转换为与x相同的类型。 (唯一的例外是x的类型为“原始”,这种类型很少使用。它将转换为逻辑。)

如果x是一个数字,则它保持不变,并且TRUE转换为数字1。因此,比较变为x == 1,只有{{1 }}为1。如果x是一个字符值,则x将成为TRUE,并且这是唯一相等的值。

您的第二个问题是在"TRUE"中使用非逻辑condition时会发生什么。在这种情况下,if(condition)将转换为逻辑值。对于数字,存在三种可能性:0变为conditionFALSENA给出错误,而任何其他数字变为NaN。对于字符,一些不同的值(TRUE"FALSE""F""false")给出"False",另外一些给出FALSE,但是大多数都给出了错误。