美文网首页R语言学习
R语言-逻辑运算

R语言-逻辑运算

作者: Seurat_Satija | 来源:发表于2021-01-05 10:06 被阅读0次

    本次课程简要介绍一下R中的逻辑运算。

    R中有两个逻辑值,也称为布尔值。 它们分别是TRUEFALSE。 在R中,可以构造逻辑表达式,其结果为TRUEFALSE

    相等

    创建逻辑表达式需要逻辑运算符,逻辑运算符的功能类似于+、-、*、/等算术运算符。我们首先学习的逻辑运算符是相等运算符,用2个等号表示:==。简单尝试下:

    > TRUE == TRUE
    [1] TRUE
    

    与算术运算符一样,逻辑运算符也能使用括号()来分组,以改变运算顺序。

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

    等式逻辑运算符也可以用来比较数字。

    > 6 == 7
    [1] FALSE
    

    结果是FALSE,因为67小,他们并不相等。

    小于、大于

    小于运算符< 用来比较左侧的数字是否小于右侧的数字。我们再来用<比较67

    > 6 < 7
    [1] TRUE
    

    小于运算符还可以和等号一起组成运算符<=,表示左侧的数字小于或等于右侧的数字。

    > 10 <= 10
    [1] TRUE
    

    相对应的,也存在大于运算符>和大于等于运算符>=

    不相等

    上面提到相等的运算符,在R中还有不相等运算符!=,用来计算两边的值是否不相等。因为表达式TRUE != FALSE的结果是TRUE。与相等运算符一样,不相等运算也可以用于数字。

    > 5 != 7
    [1] TRUE
    

    取反

    为了取反布尔表达式,我们可以用!(非)操作符。比如! TRUE (非真)和 FALSE是相等的。我们可以尝试对5 == 7的结果取反。

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

    与或

    当我们需要检查多个逻辑表达式之间的关系时,就要用到运算符。

    与(AND)

    让我们先看一下运算符的工作方式。 在R中,有2运算符,分别是:&&&。这两个运算符的工作方式相似。即如果运算符两边的布尔值均为TRUE,则返回TRUE。否则,返回FALSE

    > FALSE & FALSE
    [1] FALSE
    

    我们可以使用&运算符对向量进行运算。 &&版本仅比较向量的第一个成员。 下面通过一个例子看看两者的区别。

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

    在这里,又一次看到了向量的循环使用。上述代码等价于c(TRUE, TRUE, TRUE) & c(TRUE, FALSE, FALSE)。现在我们把&替换成&&

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

    在这种情况下,左边的TRUE只和右边向量的第一个元素TRUE进行了操作,剩余的元素都被忽略了。

    或(OR)

    使用运算符|比较两侧的表达式,如果两边都是TRUE,同样返回TRUE。但是如果只有一边为TRUE,结果依然返回TRUE。只有当两边的结果都是FALSE时,结果才是FALSE

    对于上面的例子,我们使用|||分别进行重新比较。

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

    运算顺序

    在算术运算符中存在运算顺序,比如乘(*)的运算优先级就比加(+)的高。在逻辑运算符中同样有优先级。首先与运算的优先级高于或运算。我们来看一个可能存在歧义的例子。

    > 5 > 8 || 6 != 8 && 4 > 3.9
    [1] TRUE
    

    这个表达式等价于5 > 8 || (6 != 8 && 4 > 3.9),各表达式的布尔值是FALSE || (TRUE && TRUE)。所以结果是TRUE。下面还有几个例子。

    找出下面表达式中最后结果为的:

    1: 99.99 > 100 || 45 < 7.3 || 4 != 4.0
    2: FALSE || TRUE && FALSE
    3: TRUE && FALSE || 9 >= 4 && 3 < 6
    4: TRUE && 62 < 62 && 44 >= 44
    

    找出下面表达式中最后结果为的:

    1: FALSE || TRUE && 6 != 4 || 9 > 4
    2: FALSE && 6 >= 6 || 7 >= 8 || 50 <= 49.5
    3: 6 >= -9 && !(6 > 7) && !(!TRUE)
    4: !(8 > 4) ||  5 == 5.0 && 7.8 >= 7.79
    

    相关函数

    现在我们对R中的逻辑表达式有一点了解了,我们可以使用R中提供的一些函数来处理逻辑表达式。

    isTRUE()

    比如isTRUE()函数,它接受一个参数,如果参数的计算结果为真,则返回TRUE,反之返回FALSE

    > isTRUE(6 > 4)
    [1] TRUE
    

    identical()

    函数identical()用来比较两个R对象是否一致,一致时返回TRUE

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

    xor()

    有一个值得注意的函数是异或函数xor()。这个函数接受2个参数,当一个参数为TRUE,另一个参数为FALSE时,结果返回TRUE,其他情况返回FALSE

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

    which()

    which()函数会返回参数表达式中结果为TRUE的元素索引。

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

    ints > 7的返回结果中,第1、4、5位元素是TRUE。所以最终返回1、4、5

    any()、all()

    which()函数一样,函数any()all()都将逻辑向量作为其参数。
    如果逻辑向量中的一个或多个元素为TRUE,则any()函数将返回TRUE
    如果逻辑向量中的每个元素均为TRUE,则all()函数将返回TRUE

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

    小结

    逻辑运算符:

    • 相等 —— ==
    • 不相等 —— !== 比较两侧的表达式是否相等
    • 取反 —— ! 对布尔值取反
    • 大于、大于等于 —— >,>=
    • 小于、小于等于 —— <,<=
    • 与 —— &&& 两侧都为真,则结果为真。否则结果为假
    • 或 —— ||| 两侧都为假,则结果为假。有一侧为真,则结果为真。

    运算符的优先级优先级

    R语言学习7-逻辑运算

    相关文章

      网友评论

        本文标题:R语言-逻辑运算

        本文链接:https://www.haomeiwen.com/subject/dijioktx.html