Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
radixsort如何处理R中的字符串?_R_Sorting_Radix Sort - Fatal编程技术网

radixsort如何处理R中的字符串?

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)))

我试图生成一些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)))

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”))