我想知道R排序算法在排序字符向量时如何工作
a = c("aa(150)", "aa(1)S")
sort(a)
# [1] "aa(150)" "aa(1)S"
a = c("aa(150)", "aa(1)")
sort(a)
# [1] "aa(1)" "aa(150)"
R不是从左到右逐个比较字符的整数值吗?添加角色的原因可以改变结果吗?
我认为排序由“5”和“)”字符决定,后面的字符被忽略。
与Python比较
In [1]: a=["aa(150)","aa(1)"]
In [2]: sorted(a)
Out[2]: ['aa(1)', 'aa(150)']
In [3]: a=["aa(150)","aa(1)S"]
In [4]: sorted(a)
Out[4]: ['aa(1)S', 'aa(150)']
答案 0 :(得分:3)
将语言环境设置为默认值,在大多数情况下将关闭特定于语言环境的排序:
Sys.setlocale("LC_COLLATE", "C")
a=c("aa(150)","aa(1)S")
sort(a)
#[1] "aa(1)S" "aa(150)"
由于语言差异,字符串排序必须具有国际特异性。来自?sort
的帮助:
字符向量的排序顺序取决于整理 正在使用的语言环境的序列:参见比较。
然后我们可以转到?Comparisons
:
字符向量中字符串的比较是字典中的字典 使用正在使用的语言环境的整理顺序的字符串:请参阅 语言环境。诸如en_US的语言环境的整理顺序通常是 不同于C(应该使用ASCII)并且可能令人惊讶。 谨防对整理顺序做出任何假设:例如在 爱沙尼亚语Z介于S和T之间,并且不一定是整理 逐个字符 - 在丹麦语中作为单个字母排序,之后 ž。在威尔士语中,可能是也可能不是单个排序单元:如果是它 跟着g。
如上所述,因为每种语言都以不同的方式使用字母,所以语言环境对排序很重要。