PDF 73 / 520 Logical Operators
English · PDF 73
Original PDF page 73
中文 · PDF 73

刚开始使用 R 时,最容易犯的错误是在测试相等性时使用 = 而不是 ==。发生这种情况时,你会得到一条有提示性的错误信息:

filter(flights, month = 1) #> Error: filter() takes unnamed arguments. Do you need ==?

使用 == 时还可能遇到另一个常见问题:浮点数。这些结果可能会让你感到惊讶!

sqrt(2) ^ 2 == 2 #> [1] FALSE 1/49 * 49 == 1 #> [1] FALSE

计算机使用有限精度算术(它们显然无法存储无限多的数字!),所以请记住,你看到的每个数字都是近似值。不要依赖 ==,而应使用 near():

near(sqrt(2) ^ 2, 2) #> [1] TRUE near(1 / 49 * 49, 1) #> [1] TRUE

逻辑运算符

filter() 的多个参数是用“与”组合起来的:每个表达式都必须为真,该行才会被包含在输出中。对于其他类型的组合,你需要自己使用布尔运算符:& 是“与”, | 是“或”,! 是“非”。下图展示了布尔运算的完整集合。

以下代码查找所有在 11 月或 12 月出发的航班: