当我在我的 Windows 和 Ubuntu 远程服务器上运行代码时,我有一个排序不同的向量。

视窗:

> 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 系统不同的“语言环境”。但是,一定要小心。没有语言环境会按正确的数字顺序对这些字符串进行排序,如果需要数字顺序,则必须对数字向量进行排序。

从每个系统中获取 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

10-07 19:25
查看更多