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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。