2016-04-21 67 views
3

當我想知道如何將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

它適用於我使用R.語言環境可能是問題。 –

+2

先嚐試'Sys.setlocale(「LC_COLLATE」,「C」)',然後再次檢查。你可以在'locales'看到更多的信息 –

+0

謝謝@PierreLafortune,設置區域設置解決了這個問題。 – wujohn1990

回答

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之間,並且排序規則不一定是 逐個字符 - 在丹麥語中,類似於單個字母,在 z之後。在威爾士語中,ng可能是也可能不是單個分揀單元:如果它是 後跟g。

如前所述,因爲每種語言都以不同的方式使用字母,所以語言環境對排序很重要。