首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么unicode字符串上的as.factor()在每个操作系统上返回不同的结果?

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

Stack Overflow用户
提问于 2016-09-06 09:42:27
回答 3查看 308关注 0票数 9

为什么这段代码: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作业。现在承认这不是一种好的编码方式,但输出中的不一致会导致很多混乱和浪费时间。

EN

Stack Overflow用户

发布于 2016-09-06 10:07:54

它不只是Unicode,也不只是R;sort通常(甚至在*nix命令sort中)可以是特定于地区的。为了消除差异,需要在所有机器上通过Sys.setlocale (根据@alistaire的评论)设置LC_COLLATE (假设为"C")。

对我来说,在Windows (7)上:

代码语言:javascript
运行
复制
sort(c("Abc", "abc", "_abc", "ABC"))
[1] "_abc" "abc"  "Abc"  "ABC" 

而在Linux上(Ubuntu 12.04 ...哇,我需要升级那台机器)我得到

代码语言:javascript
运行
复制
sort(c("Abc", "abc", "_abc", "ABC"))
[1] "abc"  "_abc" "Abc"  "ABC" 

按照上面的方式设置区域设置

代码语言:javascript
运行
复制
Sys.setlocale("LC_COLLATE", "C")

给出

代码语言:javascript
运行
复制
sort(c("Abc", "abc", "_abc", "ABC"))
[1] "ABC"  "Abc"  "_abc" "abc" 

在两台机器上,完全相同。

sort的*nix man页面给出了粗体警告

\*\*\* 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",这可能是一个潜在的解决方案。

票数 6
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39339489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档