2011-08-29 15 views
15

R, karakter vektörlerini, ASCII değil, alfabetik olarak tanımladığım bir sırayla sıralar. ÖrneğinKarakter vektörlerinin R sıralama kuralları nelerdir?

:

sort(c("dog", "Cat", "Dog", "cat")) 
[1] "cat" "Cat" "dog" "Dog" 

Üç sorular:

  1. bu sıralama düzeni tanımlamak için teknik olarak doğru terminoloji nedir?
  2. Bu konuda, CRAN'daki kılavuzlarda herhangi bir başvuru bulamıyorum. R'de sıralama kurallarının açıklamasını nerede bulabilirim?
  3. , C, Java, Perl veya PHP gibi diğer dillerde bu tür davranışlardan farklı mıdır?
+0

İlgili [Karakter dizilerini sıralarken durumu göz ardı etmeyin] (http://stackoverflow.com/q/4245196/271616). –

cevap

21

Details:sort() için devletler:

The sort order for character vectors will depend on the collating 
sequence of the locale in use: see ‘Comparison’. The sort order 
for factors is the order of their levels (which is particularly 
appropriate for ordered factors). 

ve help(Comparison) sonra gösterir:

Comparison of strings in character vectors is lexicographicwithin 
the strings using the collating sequence of the locale in use:see 
‘locales’. The collating sequence of locales such as ‘en_US’ is 
normally different from ‘C’ (which should use ASCII) and can be 
surprising. Beware of making _any_ assumptions about the 
collation order: e.g. in Estonian ‘Z’ comes between ‘S’ and ‘T’, 
and collation is not necessarily character-by-character - in 
Danish ‘aa’ sorts as a single letter, after ‘z’. In Welsh ‘ng’ 
may or may not be a single sorting unit: if it is it follows ‘g’. 
Some platforms may not respect the locale and always sort in 
numerical order of the bytes in an 8-bit locale, or in Unicode 
point order for a UTF-8 locale (and may not sort in the same order 
for the same language in different character sets). Collation of 
non-letters (spaces, punctuation signs, hyphens, fractions and so 
on) is even more problematic. 

yüzden sizin yerel ayarına bağlıdır.

+1

D'oh. Bunu http://cran.r-project.org/doc/manuals/R-ints.html adresinde bulmaya çalışıyordum. Teşekkür ederim. – Andrie

+3

Dirk & yardımın açıklamasını, ancak R'nin dışında geliştirmeye çalışmayacağım, bunun, sözde-değişmeyen de olsa, sözlüksel sıralama olarak tanımlandığını bulabiliriz. Harmanlama kuralı ciddi bir değerlendirmedir, çünkü naif metin işleme genellikle İngilizce sıralamaya göre yapılır, bu da diğer bazı diller için kötüdür. Bunun iyi bir örneği, isim sıralamalarının ana dili konuşanlara * ya da * katı harflerle sadece 26 harfi düşünen insanlara gerçekten tuhaf görünmesini sağlar. – Iterator

+0

ve uzun zamandır, uzay karakterlerinin göz ardı edilip edilmeyebileceğini veya bu testlerin yerel olarak test edilip edilmediğine bağlı olarak değiştiğini ya da "R CMD kontrolünü" –

İlgili konular