R Cheat Sheet (8): Logic

本节的主要内容是R中的逻辑运算。

1. 逻辑运算符

等号运算符== 是一个逻辑运算符,用于比较两个元素是否相同。

> TRUE == TRUE
[1] TRUE
> 6 == 7
[1] FALSE
> TRUE == TRUE [1] TRUE > 6 == 7 [1] FALSE
> TRUE == TRUE
[1] TRUE
> 6 == 7
[1] FALSE

和数学表达式一样, 逻辑表达式也可以使用括号() :

> (FALSE == TRUE) == FALSE
[1] TRUE
> (FALSE == TRUE) == FALSE [1] TRUE
> (FALSE == TRUE) == FALSE
[1] TRUE

和多数编程语言一样,< 、<= 、> 、>= 用于比较大小:

> 6 < 7
[1] TRUE
> 10 <= 10
[1] TRUE
> 6 < 7 [1] TRUE > 10 <= 10 [1] TRUE
> 6 < 7
[1] TRUE
> 10 <= 10
[1] TRUE

!= 用于判断不等于:

> 5 != 7
[1] TRUE
> 5 != 7 [1] TRUE
> 5 != 7
[1] TRUE

! 为非(Not)运算符:

> !(5 == 7)
[1] TRUE
> !(5 == 7) [1] TRUE
> !(5 == 7)
[1] TRUE

& 和&& 为与(And)运算符,二者的去别在于, & 可以作用于整个vector,而&& 只会作用于vector的第一个元素:

> FALSE & FALSE
[1] FALSE
> TRUE & c(TRUE, FALSE, FALSE)
[1] TRUE FALSE FALSE
> TRUE && c(TRUE, FALSE, FALSE)
[1] TRUE
> FALSE & FALSE [1] FALSE > TRUE & c(TRUE, FALSE, FALSE) [1] TRUE FALSE FALSE > TRUE && c(TRUE, FALSE, FALSE) [1] TRUE
> FALSE & FALSE
[1] FALSE
> TRUE & c(TRUE, FALSE, FALSE)
[1]  TRUE FALSE FALSE
> TRUE && c(TRUE, FALSE, FALSE)
[1] TRUE

&& 并不同于其他编程语言中的“短路与”,作用于vector时,只有第一个元素参与运算,无论结果如何,都不会继续运算。

| 和|| 为或(Or)运算符,其区别与& 和&& 相似:

> TRUE | c(TRUE, FALSE, FALSE)
[1] TRUE TRUE TRUE
> TRUE || c(TRUE, FALSE, FALSE)
[1] TRUE
> TRUE | c(TRUE, FALSE, FALSE) [1] TRUE TRUE TRUE > TRUE || c(TRUE, FALSE, FALSE) [1] TRUE
> TRUE | c(TRUE, FALSE, FALSE)
[1] TRUE TRUE TRUE
> TRUE || c(TRUE, FALSE, FALSE)
[1] TRUE

2. 常用函数

函数isTrue() 可以判断其参数的结果是否为TRUE:

> isTRUE(6 > 4)
[1] TRUE
> isTRUE(6 > 4) [1] TRUE
> isTRUE(6 > 4)
[1] TRUE

函数identical() 可以判断作为其参数的两个R对象是否完全相同:

> identical('twins', 'twins')
[1] TRUE
> identical('twins', 'twins') [1] TRUE
> identical('twins', 'twins')
[1] TRUE

函数xor() 用于进行异或运算:

> xor(TRUE, TRUE)
[1] FALSE
> xor(TRUE, FALSE)
[1] TRUE
> xor(FALSE, TRUE)
[1] TRUE
> xor(FALSE, FALSE)
[1] FALSE
> xor(5 == 6, !FALSE)
[1] TRUE
> xor(TRUE, TRUE) [1] FALSE > xor(TRUE, FALSE) [1] TRUE > xor(FALSE, TRUE) [1] TRUE > xor(FALSE, FALSE) [1] FALSE > xor(5 == 6, !FALSE) [1] TRUE
> xor(TRUE, TRUE)
[1] FALSE
> xor(TRUE, FALSE)
[1] TRUE
> xor(FALSE, TRUE)
[1] TRUE
> xor(FALSE, FALSE)
[1] FALSE
> xor(5 == 6, !FALSE)
[1] TRUE

函数which() 接受logical vector作为参数,会返回参数logical vector中为TRUE的元素的索引:

> ints <- sample(10)
> ints
[1] 10 9 3 7 2 6 4 1 8 5
> ints > 7
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
> which(ints > 7)
[1] 1 2 9
> ints <- sample(10) > ints [1] 10 9 3 7 2 6 4 1 8 5 > ints > 7 [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE > which(ints > 7) [1] 1 2 9
> ints <- sample(10)
> ints
 [1] 10  9  3  7  2  6  4  1  8  5
> ints > 7
 [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE
> which(ints > 7)
[1] 1 2 9

类似于which() ,any() 和all() 也接受logical vector作为参数。如果参数logical vector中有一个或多个元素为TRUE,any() 返回TRUE,否则返回FALSE;只有当参数logical vector中所有元素为TRUE,all() 才会返回TRUE,否则返回FALSE:

> any(ints < 0)
[1] FALSE
> all(ints > 0)
[1] TRUE
> any(ints < 0) [1] FALSE > all(ints > 0) [1] TRUE
> any(ints < 0)
[1] FALSE
> all(ints > 0)
[1] TRUE