为什么这个代码:as.factor(c("\U201C", '"3', "1", "2", "\U00B5"))
,在每个操作系统上返回不同的因子水平排序?为什么unicode字符串上的as.factor()会为每个操作系统返回不同的结果?
在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 µ
我有一些学生提交的R包含as.numeric(as.factor(dat$var))
的Mardkown作业。现在认为这不是一种好的代码编写方式,但是输出的不一致导致了很多混乱和浪费时间。
虽然很奇怪,但在FreeBSD和OS X上是一样的。不知道差异来自哪里,但知道OS X和FreeBSD之间的相似之处可能会有所帮助? – Jemus42
我没有答案,但它实际上可能来自R中的'sort'函数。查看'as.factor'的代码,您有'levels < - sort(unique.default(x))''。我已经在Windows和Mac OS上尝试过'排序'并获得不同的排序。 – jav
这是一个区域设置,特别是'LC_COLLATE'。你可以用'Sys.setlocale'来设置它,看看发生了什么。 – alistaire