radixsort如何处理R中的字符串?
我试图生成一些ASCII字符串向量,并使用radixsort如何处理R中的字符串?,r,sorting,radix-sort,R,Sorting,Radix Sort,我试图生成一些ASCII字符串向量,并使用sort和sort(…,method=“radix”)对它们进行排序;然而,排序向量是不同的!我试图通读radixsort帮助,但这并不是说radixsort应该以任何其他方式对字符串向量进行排序。这是一个bug还是基数排序的“特性” 请参阅下面的MWE set.seed(1) library(data.table) bs = replicate(10, rawToChar(sample(as.raw(32:126), 2, replace=T)))
sort
和sort(…,method=“radix”)
对它们进行排序;然而,排序向量是不同的!我试图通读radixsort帮助,但这并不是说radixsort应该以任何其他方式对字符串向量进行排序。这是一个bug还是基数排序的“特性”
请参阅下面的MWE
set.seed(1)
library(data.table)
bs = replicate(10, rawToChar(sample(as.raw(32:126), 2, replace=T)))
bs_sorted = sort(bs)
bs_radixsorted = sort(bs, method="radix")
bs_sorted
# "[%" "30" "3u" "9C" "aD" "d~" "Di" "iO" "Vv" "y^"
bs_radixsorted
# "30" "3u" "9C" "Di" "Vv" "[%" "aD" "d~" "iO" "y^"
我在Windows1064位上运行R3.4.3
更多信息
MS Excel以
sort
对字符串排序的方式对其进行排序,也许sort
是更规范的排序方式?这不是一个完整的答案,但问题似乎仅限于排序算法如何处理符号和大写字母。如果只使用数字,这两种算法是一致的:
bs = sample(1:100, 10)
或者只是小写字母:
bs = replicate(10, paste(sample(letters, 2, replace = T), collapse = ""))
bs = replicate(10, paste(sample(c(letters[1:2], toupper(letters[1:2])), 1, replace = T), collapse = ""))
但如果添加一些符号,则不会:
bs = replicate(10, paste(sample(c(letters[1:2], "*", "%"), 1, replace = T), collapse = ""))
或者,如果混合使用大写和小写字母:
bs = replicate(10, paste(sample(letters, 2, replace = T), collapse = ""))
bs = replicate(10, paste(sample(c(letters[1:2], toupper(letters[1:2])), 1, replace = T), collapse = ""))
因此,看起来radixsort将所有大写字母放在任何小写字母之前(例如B
在a
之前),而默认方法将a
和a
排序在B
或B
之前。此外,这两种方法将符号放在字母之前,但似乎使用符号的逆序
但是,我无法说明这是为什么,也无法说明如何关闭它。请参阅的“详细信息”部分?排序--“基数”不取决于当前的语言环境。作为一个简单的例子,lcl=Sys.getlocale(“LC_COLLATE”);系统设置语言环境(“LC_COLLATE”、“C”);相同(排序(bs),排序(bs,method=“基数”);Sys.setlocale(“LC_COLLATE”,lcl);相同(排序(bs),排序(bs,method=“radix”))