as.factor(c(-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:51:04 25 4
gpt4 key购买 nike

为什么此代码: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com