Cập nhật tháng 3 năm 2014
Đã có một số cuộc tranh luận về việc này. Kể từ v1.9.2, chúng tôi đã giải quyết ngay bây giờ trên setkey
sắp xếp bằng ngôn ngữ C; ví dụ: tất cả các chữ cái viết hoa đều xuất hiện trước tất cả các chữ thường, bất kể ngôn ngữ của người dùng. Đây là một thay đổi được thực hiện trong v1.8.8 mà chúng tôi đã có ý định đảo ngược nhưng đã bị mắc kẹt với bây giờ.
Xem xét save()
-ing một bảng được khóa trong ngôn ngữ của bạn và một đồng nghiệp load()
-giữ nó bằng ngôn ngữ khác. Khi họ tham gia vào bảng đó, nó có thể không hoạt động chính xác nếu đó là thứ tự sắp xếp địa phương. Chúng ta phải suy nghĩ cẩn thận hơn nếu setkey
là cho phép đặt lại ngôn ngữ một lần nữa, có thể bằng cách lưu tên miền địa phương cùng với thuộc tính "được sắp xếp", do đó, data.table
ít nhất có thể so sánh và phát hiện nếu ngôn ngữ hiện tại khác với ngôn ngữ hiện tại setkey
.
Đó cũng là lý do tốc độ khi sắp xếp theo ngôn ngữ chậm hơn nhiều so với ngôn ngữ C. Mặc dù, chúng ta có thể làm điều đó một cách hiệu quả nhất có thể và cho phép nó tùy ý là lý tưởng.
Do đó, đây là yêu cầu tính năng và nhận xét thêm được hoan nghênh.
FR#4842 setkey to sort using session's locale not C locale
đẹp bắt! Gọi tới số setkey
lần lượt gọi setkeyv
và gọi số fastorder
để "đặt hàng" các cột/mục nhập mà lần lượt gọi chorder
.
chorder
lần lượt gọi hàm C Ccountingcharacter.c
. Bây giờ, ở đây tôi cho rằng vấn đề là do "ngôn ngữ".
Hãy xem những gì "miền địa phương" tôi đang sử dụng mac của mình.
Sys.getLocale()
# [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
Bây giờ chúng ta hãy xem làm thế nào order
loại nó:
x <- c("USA", "Ubuntu", "Uzbekistan")
order(x)
# [1] 2 1 3
Bây giờ, chúng ta hãy thay đổi "Locale" thành "C".
Sys.setlocale("LC_ALL", "C")
# [1] "C/C/C/C/C/en_US.UTF-8"
order(x)
# [1] 1 2 3
Từ ?order
:
Thứ tự sắp xếp cho vectơ nhân vật sẽ phụ thuộc vào trình tự collating của miền địa phương trong sử dụng: xem Comparison
.
Từ ?Comparison
:
So sánh chuỗi trong vectơ nhân vật là tự từ điển trong chuỗi bằng cách sử dụng chuỗi collating của miền địa phương trong sử dụng: xem miền địa phương. Chuỗi đối sánh các ngôn ngữ như en_US thường khác với C (nên sử dụng ASCII) và có thể gây ngạc nhiên. Cẩn thận với việc đưa ra bất kỳ giả định nào về thứ tự đối chiếu: ví dụ: trong Z Estonia đến giữa S và T, và collation không nhất thiết phải là nhân vật-by-nhân vật - trong các loại aa Đan Mạch như một lá thư duy nhất, sau khi z ....
Vì vậy, về cơ bản, order
cũng dưới " C "locale, cho cùng thứ tự như 's setkey
. Tôi đoán là chức năng C được gọi là bởi chorder
sẽ tự động chạy trên C-locale sẽ so sánh giá trị ascii mà "S" đến trước "b".
Có lẽ điều quan trọng là phải mang điều này đến sự chú ý của @ MatthewDowle (nếu anh ấy chưa biết về nó). Vì vậy, tôi muốn đề nghị bạn nộp nó như là một lỗi here (chỉ để chắc chắn).
HĐH của bạn là gì? – GSee
Hệ điều hành của tôi là Windows 7 – jem77bfp