这是一个简单但奇怪的问题。我在字符向量上使用sort
。
Browse[1]> x
[1] "OU anisotropic" "OUF anisotropic" "OU isotropic" "OUF isotropic"
Browse[1]> sort(x)
[1] "OU anisotropic" "OU isotropic" "OUF anisotropic" "OUF isotropic"
Browse[1]> sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.2
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
很简单,但是我发现sort没有给出预期的结果,在Linux,R 3.4.1。注意y与上面的x不同,但无论如何排序结果都不正确。
> y
[1] "OU anisotropic" "OUF anisotropic" "OUF isotropic" "OU isotropic"
> sort(y)
[1] "OU anisotropic" "OUF anisotropic" "OUF isotropic" "OU isotropic"
> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 18.2
Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
我猜这是与地方相关的?如何控制排序功能以获得一致的结果?
我尝试stringr::str_sort
似乎有一致的结果,可能是因为有一个local = "en"
参数。
但我认为基础排序也应该有一些方法。数据是简单的字符向量,因此不应涉及任何特殊的排序函数。
答案 0 :(得分:0)
感谢Henrik的link。我猜对了它的相关和搜索的区域设置,但没有找到该帖子。
help(Comparison)
有更详细的信息。令我感到困惑的是,我认为我的示例应该在不同的语言环境中排序相同,但base::sort
可能会忽略某些语言环境中的空格。
我发现stringr::str_sort
有一个locale = "en"
参数,因此您可以跨平台获得一致的结果。