如果if()语句不包含逻辑表达式怎么办?
例如,if-else块if(2){print(“ A”)} else {print(“ B”)})输出A,但是2不是true,因此它应该打印B。为什么?< / p>
答案 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
需要x
和TRUE
属于同一类型。通常,像TRUE
这样的逻辑将转换为与x
相同的类型。 (唯一的例外是x
的类型为“原始”,这种类型很少使用。它将转换为逻辑。)
如果x
是一个数字,则它保持不变,并且TRUE
转换为数字1。因此,比较变为x == 1
,只有{{1 }}为1。如果x
是一个字符值,则x
将成为TRUE
,并且这是唯一相等的值。
您的第二个问题是在"TRUE"
中使用非逻辑condition
时会发生什么。在这种情况下,if(condition)
将转换为逻辑值。对于数字,存在三种可能性:0变为condition
,FALSE
或NA
给出错误,而任何其他数字变为NaN
。对于字符,一些不同的值(TRUE
,"FALSE"
,"F"
和"false"
)给出"False"
,另外一些给出FALSE
,但是大多数都给出了错误。