Nun, ich habe eingereicht das Problem auf Github aber keine Antwort bekommen. data.table
ist ein großartiges R-Paket, das uns bei der täglichen Arbeit sehr hilft.
Nach der Version 1.9.6 unterstützt es jedoch plötzlich keine Nicht-ASCII-Schlüssel in Windows, wenn die Spalte nicht in UTF-8 codiert ist (die Standard-Nicht-ASCII-Zeichencodierung in R hängt von der Plattform ab) .
Es ist höchstwahrscheinlich ein Fehler (und ein großer Fehler, würde ich sagen). Ich bin überrascht, dass niemand die Aufmerksamkeit auf diese bezahlt und es ist niemand zu beschweren, da der Fehler seit fast 2 Jahren existiert.
Ich habe stundenlang versucht, das Problem zu lösen, ist aber gescheitert. Die entsprechenden Commits sind Ссылка und Ссылка
Sie versuchen tatsächlich andere Codierung Zeichen in UTF-8 zu konvertieren, dann sortieren und vergleichen Sie alle Zeichen in UTF-8. Es scheint, als wäre die Handhabung der Codierung korrekt. Ich vermute jedoch, dass der Bug dort versteckt ist. Die Umsetzung data.table
ist wirklich komplex, ich frage, ob jemand so helfen kann, dass wir eine PR machen können diese nach unten zu regeln.
Vielen Dank.
Minimal reproducible example
Jetzt gibt es die richtige Antwort 1
zurück.
Beachten Sie, dass die Reihenfolge der dt auch jetzt anders wird, was nicht passieren soll.
Ich beantworte meine eigene Frage, um es zu schließen, da dieses Problem in PR gelöst wurde.
Bei Zeichenfolgen vergleicht data.table
ihre Werte in der UTF8-Codierung. Aufgrund der fehlenden zwei ENC2UTF8
in csort()
und csort_pre()
hängt die Reihenfolge, die data.table erstellt, jedoch von der Codierung ab. Unter Windows führt die Tatsache, dass die Standardcodierung nicht UTF8 ist, zu seltsamen Ausgaben, wenn es Strings in Schlüsseln gibt.
Um diesen Fall zu debuggen, müssen Sie wissen, wie Sie die Nicht-ASCII-Zeichen aus der C-Routine in die Ausgabe von R ausgeben. Wenn Sie Rprintf()
direkt verwenden, erhalten Sie ein Durcheinander. Sie müssen translateChar()
für die Zeichenfolge zuerst verwenden.
Referenzen:
Tags und Links r encoding data.table