r - 为什么在unicode字符串上的as.factor()对于每个操作系统都返回不同的结果?

标签 r unicode

为什么此代码:as.factor(c("\U201C", '"3', "1", "2", "\U00B5")),在每个操作系统上返回因子级别的不同顺序?

在Linux上:
> as.factor(c("\U201C",'"3', "1", "2","\U00B5")) [1] " "3 1 2 µ Levels: µ " 1 2 "3
在Windows上:
> as.factor(c("\U201C",'"3', "1", "2","\U00B5")) [1] " "3 1 2 µ Levels: "3 " µ 1 2
在Mac OS上:
>as.factor(c("\U201C",'"3', "1", "2","\U00B5")) [1] " "3 1 2 µ Levels: "3 " 1 2 µ
我让一些学生提交了一个包含as.numeric(as.factor(dat$var))的RMardkown作业。现在,这不是编码的好方法,但是输出中的不一致会导致很多困惑和浪费时间。

最佳答案

这不仅是Unicode,还不仅仅是R;通常,sort(甚至在* nix命令sort中也可以)是特定于语言环境的。需要通过在所有机器上通过LC_COLLATE(根据@alistaire的注释)设置"C"(大概是Sys.setlocale)来消除差异。

对我而言,在Windows(7)上:

sort(c("Abc", "abc", "_abc", "ABC"))
[1] "_abc" "abc"  "Abc"  "ABC" 

而在Linux上(Ubuntu 12.04 ...哇,我需要升级该机器)我得到了
sort(c("Abc", "abc", "_abc", "ABC"))
[1] "abc"  "_abc" "Abc"  "ABC" 

通过上述方式设置语言环境
Sys.setlocale("LC_COLLATE", "C")


sort(c("Abc", "abc", "_abc", "ABC"))
[1] "ABC"  "Abc"  "_abc" "abc" 

在两台机器上都一样。
man的* nix sort页面给出了粗体警告

   *** WARNING *** The locale specified by the  environment  affects  sort
   order.  Set LC_ALL=C to get the traditional sort order that uses native
   byte values.


更新:包括Unicode字符时,我似乎重现了该问题。问题可追溯到sort-尝试在示例中对向量进行排序。我似乎也无法将语言环境(LC_COLLATELC_CTYPE)更改为"en_AU.UTF-8",这将是一个潜在的解决方案。

关于r - 为什么在unicode字符串上的as.factor()对于每个操作系统都返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339489/

相关文章:

oop - 有没有办法为 S4 引用类声明公共(public)和私有(private)方法?

R编程: How do I get Euler's number?

javascript - 将 Unicode 字符插入 JavaScript

ruby - MiniTest 和非拉丁测试描述

java - Itext PDF writer,有什么方法可以在pdf中允许unicode下标符号吗? (没有 setTextRise)

javascript - 使用 Perl 将斜体字发布到 twitter

Python unicode 问题

r - 未找到 devtools::test 对象

r - write_csv read_csv 在第 1000 行后使用科学记数法

r - 使用 dplyr mutate 将向量分成两列