Comparison
位于 base
包(package)。 说明
允许比较原子向量中的值的二元运算符。
用法
x < y
x > y
x <= y
x >= y
x == y
x != y
参数
x, y |
原子向量、符号、调用或已为其编写方法的其他对象。 |
细节
二进制比较运算符是通用函数:可以单独为它们编写方法,也可以通过 Ops
组通用函数编写方法。 (有关如何计算调度的信息,请参阅Ops
。)
字符向量中的字符串比较是使用所使用的语言环境的整理顺序在字符串内按字典顺序进行的:请参阅locales
。区域设置的整理顺序,例如‘en_US' 通常与 ' 不同C’(应该使用 ASCII)并且可能会令人惊讶。谨防制作任何关于整理顺序的假设:例如爱沙尼亚语Z
介于S
和T
,并且排序规则不一定是逐个字符的 - 在丹麦语中aa
作为单个字母排序,之后z
。威尔士语ng
可能是也可能不是单个排序单元:如果是,则如下g
。某些平台可能不考虑区域设置,并且始终按 8 位区域设置中的字节数字顺序排序,或者对于 UTF-8 区域设置按 Unicode code-point 顺序排序(对于相同语言,可能不会按相同顺序排序)不同的字符集)。非字母(空格、标点符号、连字符、分数等)的排序更成问题。
字符串可以与不同标记的编码进行比较(参见 Encoding
):在比较之前将它们转换为 UTF-8。
原始向量实际上不应被视为具有顺序,但使用字节表示的数字顺序。
至少其中之一x
和y
必须是原子向量,但如果另一个是列表R尝试将其强制转换为原子向量的类型:如果列表由长度为 1 且可以强制转换为正确类型的元素组成,则此操作将会成功。
如果两个参数是不同类型的原子向量,则一个参数被强制转换为另一个参数的类型,优先级(递减)顺序为字符、复数、数字、整数、逻辑和原始。
缺失值 ( NA
) 和 NaN
值甚至被视为不可比较,因此涉及它们的比较将始终导致 NA
。当比较字符串并且字符串在当前排序规则区域设置中无效时,也可能会导致缺失值。
诸如符号和调用之类的语言对象在比较之前被解析为字符串。
值
一个逻辑向量,指示逐个元素比较的结果。较短向量的元素根据需要被回收。
数组或时间序列等对象可以通过这种方式进行比较,前提是它们是一致的。
S4方法
这些运算符是 S4 Compare
组泛型的成员,因此可以使用参数 c(e1, e2)
单独为它们编写方法,也可以为泛型组(或 Ops
组泛型)编写方法。
注意
请勿使用 ==
和 !=
进行测试,例如在 if
表达式中,您必须获取单个 TRUE
或 FALSE
。除非您完全确定不会发生任何异常情况,否则应使用identical
函数。
对于数值和复数值,请记住 ==
和 !=
不允许分数的有限表示,也不允许舍入误差。将 all.equal
与 identical
或 isTRUE
一起使用几乎总是更好;请参阅示例。 (这也适用于其他比较运算符。)
这些运算符有时被称为函数,例如`<`(x, y)
:请参阅Ops
中如何完成argument-matching 的说明。
例子
x <- stats::rnorm(20)
x < 1
x[x > 0]
x1 <- 0.5 - 0.3
x2 <- 0.3 - 0.1
x1 == x2 # FALSE on most machines
isTRUE(all.equal(x1, x2)) # TRUE everywhere
# range of most 8-bit charsets, as well as of Latin-1 in Unicode
z <- c(32:126, 160:255)
x <- if(l10n_info()$MBCS) {
intToUtf8(z, multiple = TRUE)
} else rawToChar(as.raw(z), multiple = TRUE)
## by number
writeLines(strwrap(paste(x, collapse=" "), width = 60))
## by locale collation
writeLines(strwrap(paste(sort(x), collapse=" "), width = 60))
参考
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Collation of character strings is a complex topic. For an introduction see https://en.wikipedia.org/wiki/Collating_sequence. The Unicode Collation Algorithm (https://unicode.org/reports/tr10/) is likely to be increasingly influential. Where available R by default makes use of ICU (https://icu.unicode.org/) for collation (except in a C locale).
也可以看看
Logic
关于如何组合比较结果,即逻辑向量。
factor
用于带有因子参数的行为。
Syntax
用于运算符优先级。
capabilities
用于确定 ICU 是否可用,icuSetCollate
用于在可用时调整字符串排序算法。
相关用法
- R Colon 冒号运算符
- R Constants 内置常量
- R Control 控制流
- R CallExternal C/C++ 代码的现代接口
- R Cstack_info 报告有关 C 堆栈大小和使用情况的信息
- R file.path 构造文件路径
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R lapply 对列表或向量应用函数
- R dump R 对象的文本表示
- R Sys.getenv 获取环境变量
- R rank 样本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R pushBack 将文本推回连接
- R strsplit 分割字符向量的元素
- R seq.Date 生成规则的日期序列
- R invisible 将打印模式更改为不可见
- R noquote “无引号”字符串打印类
- R warning 警告信息
- R rapply 递归地将函数应用于列表
- R basename 操作文件路径
- R with 评估数据环境中的表达式
- R formals 访问和操纵形式参数
- R icuSetCollate 按 ICU 设置整理
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Relational Operators。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。