R 什么';字符串匹配的fixed()和coll()之间的区别是什么?

R 什么';字符串匹配的fixed()和coll()之间的区别是什么?,r,stringr,R,Stringr,几乎所有来自stringr包的帮助文件都包含这一行 使用fixed()匹配固定字符串(即仅比较字节)。 这是快速的,但近似。一般来说,为了匹配人类文本, 您将需要coll(),它尊重 指定的区域设置 基本R包不包括coll()的选项,它们只包括fixed()的选项。但是基本包也有useBytes,它在函数中被设置为FALSE,就像在grepl中一样 fixed()与fixed=TRUE,useBytes=TRUE相同吗?coll()与fixed=TRUE,useBytes=FALSE相同吗?我是

几乎所有来自
stringr
包的帮助文件都包含这一行

使用fixed()匹配固定字符串(即仅比较字节)。 这是快速的,但近似。一般来说,为了匹配人类文本, 您将需要coll(),它尊重 指定的区域设置

基本R包不包括coll()的选项,它们只包括fixed()的选项。但是基本包也有useBytes,它在函数中被设置为FALSE,就像在
grepl
中一样

fixed()与
fixed=TRUE,useBytes=TRUE
相同吗?coll()与
fixed=TRUE,useBytes=FALSE
相同吗?我是stringr的新手,我正在尝试寻找等价物。

coll()
用于“排序规则搜索”。下面是
vignette(“stringr”)


coll(x)
使用人类语言排序规则查找与x的匹配,如果要进行不区分大小写的匹配,这一点尤为重要。世界各地的排序规则各不相同,因此您还需要提供区域设置参数

i <- c("I", "İ", "i", "ı")
i
#> [1] "I" "İ" "i" "ı"

str_subset(i, coll("i", ignore_case = TRUE))
#> [1] "I" "i"
str_subset(i, coll("i", ignore_case = TRUE, locale = "tr"))
#> [1] "İ" "i"
i[1]“i”“İ”“i”“ı”
str_子集(i,coll(“i”,忽略_case=TRUE))
#>[1]“我”“我”
str_子集(i,coll(“i”,ignore_case=TRUE,locale=“tr”))
#>[1]“我”
coll()
的缺点是速度。因为识别哪些字符是相同的规则很复杂,
coll()
regex()
fixed()
相比相对较慢。请注意,当
fixed()
regex()
都有
ignore\u case参数时,它们执行的比较要比
coll()
简单得多


因此,基本上
coll()
使用来自给定区域设置的信息来了解哪些字符基本上是相同的,并允许它们相互匹配,即使从技术上讲它们是不同的字符。

看起来coll()有助于匹配表示相同字母的字母,但可能以不同的方式格式化(以不同的字节?)。coll()是否会将一个字母与另一个字母进行匹配(不包括大小写)?下面是链接自
?stringi::stri_opts_collator
。从它们的示例中,“v”和“w”根据英语是两个不同的字母。但是,“v”和“w”在瑞典语中通常被认为是同一个字母的变体。因此,如果您所在的地区是瑞典语,那么是(取决于您对“不同”的定义)。