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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。