sort()在Ubuntu和Windows中产生不同的结果

当我在WindowsUbuntu远程服务器上运行代码时,我有一个不同的sorting向量。

视窗:

> u <- getNodes(network) > head(u) [1] "-1336623650" "-1749477680" "539" "-1036241023" "6135" "-44987577" > uid <- sort(u) > head(uid) [1] "-1000019199" "-1000022360" "-1000039153" "-1000044219" "-1000069199" "-1000099640" 

Ubuntu的:

 > u <- getNodes(network) > head(u) [1] "-1336623650" "-1749477680" "539" "-1036241023" "6135" [6] "-44987577" > uid <- sort(u) > head(uid) [1] "10" "100" "1000" "10000" "-1000019199" [6] "-1000022360" 

R的两个实现都加载了相同的包,并且是相同的R版本(3.3.1)。 Ubuntu是13.10和Windows是Windows 7。

R中的字符串排序(这是你在做什么)是基于Windows和Linux系统不同的“locale”。 但是,要小心。 没有地区将按正确的数字顺序排序这些字符串,如果你想要数字顺序,你将不得不排序一个数字向量。

从每个系统中获取Sys.getlocale(“LC_COLLATE”)的值并进行比较。 对于我的包,我在入口点下面做,并在packageStartupMessage中报告。

 collateOrigValue<-Sys.getlocale("LC_COLLATE") on.exit(Sys.setlocale("LC_COLLATE",collateOrigValue), add=TRUE) Sys.setlocale("LC_COLLATE","C") 

另见https://stat.ethz.ch/R-manual/R-devel/library/base/html/locales.html

使用stringi::stri_sortstringr::str_sort在操作系统中进行一致的sting排序。