R语言的逻辑值(也称布尔值,Boolean)共有两种,TRUE和FALSE,可以简写为T和F,注意都是大写的。它们也可以用数值1和0表示。
一般而言,判断运算得到的是逻辑值。例如,1>2,会返回FALSE;5>=1,会返回TRUE;10==10,会返回TRUE,这里要注意,判断运算的相等需要写2个等号,因为一个等号已经做赋值符号用了等同于'<-‘。
在R语言中,不仅数值可以计算逻辑值,逻辑值和字符串也可以计算逻辑值。你可以尝试使用TRUE==TRUE来计算逻辑结果;也可以利用”a”==”A”来计算逻辑结果;还可以计算TRUE==1。
不等于也是一个判断符号,但是R语言中的不等于符号并不是≠,而是!=。例如,4!=5,会返回TRUE。!的作用是取反,!=的意思是对相等取反,就是不等于的意思。同理,!可以与逻辑值连用,起到对逻辑值取反的作用。如:!TRUE的结果是FALSE;!FALSE的结果是TRUE。!可以和不等式连用,像!5>7得到的结果是TRUE,这里的计算顺序是先算5>7,结果为FALSE,再取反,得到TRUE。可以看出,计算的优先顺序,不等式计算优先级要高于取反运算。
在实际应用中,我们常常会遇到多个条件判断的情形。看这个例子,一群学生考研,英语需要高于40,政治需要高于60,专业课需要高于70分才能录取。此时,就需要多个判断运算同时起作用。
假如:小红的英语、政治和专业课成绩分别为xiaohong <- c(41,75,90),用判断语句判断小红是否考上的判断是:
xiaohong[1] > 40 & xiaohong[2] > 60 & xiaohong[3] > 70

不难看出,多个条件并列用&符号链接,&表示与,必须所有条件都为TRUE才为TRUE;相应的,|符合表示或,只要有一个条件为TRUE即为TRUE。
当一个逻辑值和一个逻辑值向量并列时,&符号会将单个逻辑值复制为向量的个数,然后一一进行运算。
TRUE & c(TRUE,FALSE,FALSE)

这可能并不是我们想要的结果,如果我们只想对向量中的第一个逻辑值进行运算,可以使用严格并列符号&&和严格或符号||。这样,向量中只有第一个逻辑值会和前面的逻辑值发生运算。
TRUE || c(TRUE, FALSE ,FALSE)

判断函数,isTRUE()和isFALSE(),判断逻辑值的判断函数,说起来很拗口。顾名思义,isTRUE的参数为TRUE时,结果为TRUE,否则为FALSE;isFALSE的参数为FALSE是,结果为TRUE,否则为FALSE。自己可以练习一下。
identical()函数可以判断两个对象是否完全相等。完全相等则为TRUE,不完全相等则为FALSE。传入的两个参数顺序可以颠倒,可以使用变量。
identical(c(1,2,3),c(1,2,3))

xor()函数叫做亦或判断函数,如果两个参数一个是TRUE一个是FALSE则返回TRUE,否则返回FALSE。在该函数中,FALSE可以用0表示,0以外的其他数字都相当于TRUE。
xor(0,-1)
xor(1,-1)
xor(TRUE,FALSE)

逻辑值在筛选数据上具有巨大的作用。当学校的英语成绩为14,34,56,34,78,68,87,69,88,100时,要快速挑出不及格的分数,可以用which函数和逻辑运算。
scores <- c(14, 34, 56, 34, 78, 68, 87, 69, 88, 100)
which(scores < 60)
scores[which(scores < 60)]

当统计全校的分数时,数据量已经很大,很难一眼看出是否有不及格的同学,这个时候可以使用any()函数:只要有一个满足条件即为TRUE。any(scores < 60)返回TRUE,说明数据中有不及格的分数。
scores <- c(14, 34, 56, 34, 78, 68, 87, 69, 88, 100)
any(scores < 60)

同理,我们可以用all()函数判断是否所有人都及格了。很明显,并不是所有人都及格了。
all(scores > 60)

当需要加载R包的时候,用requrie()函数可以返回逻辑值,加载成功为TRUE,加载失败为FALSE。
思考题
1. 下列返回FALSE的是哪个选项?
A:9 >= 10
B:7 == 7
C:0 > -36
D:6 < 8
2. 下列哪个选项返回TRUE?
A:9 >= 10
B:57 < 8
C:7 == 9
D:-6 > -7
3. 下列哪个选项返回FALSE?
A:9 < 10
B:!FALSE
C:!(0 >= -1)
D:7 != 8
4. 请说明逻辑与&和严格逻辑与&&的区别?
5. 5>8||6!=8&&4>3.9的结果?
6. 下列结果为TRUE的是?
A:TRUE && FALSE || 10 >= 5 && 1 < 8
B:FALSE || TRUE && FALSE
C:99.99 > 100 || 28 < 2.3 || 8 != 8.0
D:TRUE && 15 < 15 && 6 >= 6
7. 下列结果为FALSE的是?
A:FALSE && 12 >= 12 || 1 >= 4 || 80 <= 49.5
B:6 >= -3 && !(9 > 10) && !(!TRUE)
C:FALSE || TRUE && 8 != 1 || 26 > 3
D:!(8 > 7) || 19 == 19.0 && 7.8 >= 7.79
8. 下列哪个结果是TRUE?
A:isTRUE(!TRUE)
B:isTRUE(3)
C:!isTRUE(4 < 3)
D:!isTRUE(8 != 5)
E:isTRUE(NA)
9. 下列哪个选项的结果为TRUE?
A:!identical(7, 7)
B:identical(4, 3.1)
C:identical(5 > 4, 3 < 3.1)
D:identical(‘hello’, ‘Hello’)
10. xor(12,-1)的结果是什么?
11. 下列选项为FALSE的是哪个?
A:xor(!isTRUE(TRUE), 6 > -1)
B:xor(identical(xor, ‘xor’), 7 == 7.0)
C:xor(!!TRUE, !!FALSE)
D:xor(4 >= 9, 8 != 8.0)
12. 请说明any()函数的作用?
13. 请说明all()函数的作用?
发表评论