icuSetCollate
位於 base
包(package)。 說明
控製 ICU 完成整理的方式(ICU 的可選部分)R建造)。
用法
icuSetCollate(...)
icuGetCollate(type = c("actual", "valid"))
參數
... |
命名參數,請參閱“詳細信息”。 |
type |
字符串:可以縮寫。用於排序規則的實際區域設置或有效的最具體區域設置。 |
細節
可選地,R可以通過 ICU 構建來整理字符串(https://icu.unicode.org/)。對於這樣的係統,icuSetCollate
可用於調整整理的方式。在其他版本上,調用此函數不會執行任何操作,並會發出警告。
可能的參數是
locale
:-
字符串,例如
"da_DK"
,給出要使用其排序規則的語言和國家/地區。如果存在,這應該是第一個參數。 case_first
:-
"upper"
、"lower"
或"default"
,要求首先對大寫或小寫字符進行排序。默認值通常是小寫開頭,但並非在所有語言中(例如,在丹麥語的默認設置下)。 alternate_handling
:-
控製‘variable’字符(主要是標點符號)的處理。可能的值為
"non_ignorable"
(初級強度)和"shifted"
(四級強度)。 strength
:-
應該使用哪些組件?可能的值
"primary"
、"secondary"
、"tertiary"
(默認)、"quaternary"
和"identical"
。 french_collation
:-
在法語語言環境中,重音影響排序規則的方式是從右到左,而在大多數其他語言環境中是從左到右。可能的值
"on"
、"off"
和"default"
。 normalization
:-
字符串應該標準化嗎?可能的值為
"on"
和"off"
(默認值)。這會影響複合字符的排序規則。 case_level
:-
二級和三級之間的附加級別,用於區分大小日語假名字符。可能的值
"on"
和"off"
(默認)。 hiragana_quaternary
:-
可能的值
"on"
(首先在四進製級別對平假名進行排序)和"off"
。
除了那些對整理和專門要求有詳細了解的人之外,隻有前三個可能會感興趣。
locale
接受一些特殊值:
"none"
:-
ICU 不用於排序:而是使用操作係統的排序服務。
"ASCII"
:-
ICU 不用於排序:而是使用 C 函數
strcmp
,該函數應按(無符號)數字順序逐字節排序。 "default"
:-
從操作係統獲取區域設置,就像在會話開始時所做的那樣(Windows 上除外)。如果環境變量R_ICU_LOCALE設置為非空值,則使用其值而不是谘詢操作係統,除非環境變量LC_ALL設置為'C'(或未設置但LC_COLLATE設置為'C')。
""
、"root"
:-
‘root’ 排序規則:參見https://www.unicode.org/reports/tr35/tr35-collation.html#Root_Collation.
有關 ‘real’ ICU 語言環境的規範,請參閱https://unicode-org.github.io/icu/userguide/locale/。請注意,ICU 不會報告不支持某個區域設置,而是退回到其“最適合”的想法(這可能相當不同,並且由icuGetCollate("actual")
, 經常"root"
)。大多數英語語言環境都回落到"root"
雖然例如"en_GB"
是一個有效的區域設置(至少在某些平台上),它不包含特殊的排序規則。注意"C"
不是受支持的 ICU 區域設置,因此R_ICU_LOCALE永遠不應該設置為"C"
.
一些示例是 case_level = "on", strength = "primary"
忽略重音差異,alternate_handling = "shifted"
忽略空格和標點字符。
如果操作係統設置為使用 ICU,則最初 ICU 將不會用於整理C
用於排序的區域設置和R_ICU_LOCALE未設置。一旦這個函數被調用並帶有一個值locale
, ICU 將被使用,直到再次調用locale = "none"
。 ICU一次不會使用Sys.setlocale
被稱為"C"
值LC_ALL
或者LC_COLLATE
, 即使R_ICU_LOCALE已設置。 ICU將再次使用R_ICU_LOCALE一次Sys.setlocale
被調用來設置不同的排序規則。環境變量LC_ALL(或者LC_COLLATE) 優先於R_ICU_LOCALE當且僅當它們設置為'C'。由於與其他設置整理順序的方式相互作用,R_ICU_LOCALE應謹慎使用,並且僅在需要時使用。
如果指定了 locale
,則所有自定義項都將重置為區域設置的默認值:如果 Sys.setlocale
更改了操作係統排序規則定位類別,則重置排序引擎。
值
對於 icuGetCollate
,說明正在使用的 ICU 區域設置的字符串(可能報告為 "ICU not in use"
)。 ‘actual’ 語言環境可能比請求的語言環境更簡單:例如 "da"
而不是 "da_DK"
:英語語言環境可能會報告 "root"
。
注意
除 Windows 外,隻要可用,默認情況下都會使用 ICU。由於它在內部以 UTF-8 工作,因此在 UTF-8 語言環境中效率最高。
在 Windows 上,R通常構建包括 ICU,但隻有在環境變量存在時才會使用R_ICU_LOCALE已設置,當R開始或之後icuSetCollate
調用來選擇區域設置(因為 ICU 和 Windows 對區域設置名稱的理解不同)。注意icuSetCollate(locale = "default")
應該工作得相當好,但發現係統默認忽略環境變量,例如LC_COLLATE.
例子
## These examples depend on having ICU available, and on the locale.
## As we don't know the current settings, we can only reset to the default.
if(capabilities("ICU")) withAutoprint({
icuGetCollate()
icuGetCollate("valid")
x <- c("Aarhus", "aarhus", "safe", "test", "Zoo")
sort(x)
icuSetCollate(case_first = "upper"); sort(x)
icuSetCollate(case_first = "lower"); sort(x)
## Danish collates upper-case-first and with 'aa' as a single letter
icuSetCollate(locale = "da_DK", case_first = "default"); sort(x)
## Estonian collates Z between S and T
icuSetCollate(locale = "et_EE"); sort(x)
icuSetCollate(locale = "default"); icuGetCollate("valid")
})
也可以看看
capabilities
是否有ICU可用; extSoftVersion
其版本。
ICU 用戶指南中有關整理的章節 (https://unicode-org.github.io/icu/userguide/collation/)。
相關用法
- R iconv 在編碼之間轉換字符向量
- R invisible 將打印模式更改為不可見
- R identity 恒等函數
- R is.recursive 對象是原子的還是遞歸的?
- R identical 測試對象是否完全相等
- R is.object 對象是“內部分類的”嗎?
- R integer 整數向量
- R isS4 測試 S4 對象
- R interactive R 是否以交互方式運行?
- R is.language 對象是語言對象嗎?
- R interaction 計算因子交互作用
- R isSymmetric 測試矩陣或其他對象是否對稱(厄米特)
- R is.finite 有限、無限和 NaN 數
- R is.single 對象是單精度類型嗎?
- R is.R 我們使用的是 R,而不是 S?
- R is.unsorted 測試對象是否未排序
- R ifelse 條件元素選擇
- R is.function 是類型(原始)函數的對象嗎?
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Setup Collation by ICU。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。