我通过在R
中排序字符串向量得到以下结果,这对我来说很奇怪。对所有人来说,这似乎并不相同。
dat <- data.frame(x=c('(Intercept)', 'x1', 'f3', 'i', 'j',
'(', '(a)', '(A)', '(x)', '(X)'), stringsAsFactors=F)
dat[order(dat$x), ,drop=F]
# x
# 6 (
# 7 (a)
# 8 (A)
# 3 f3
# 4 i
# 1 (Intercept)
# 5 j
# 9 (x)
# 10 (X)
# 2 x1
我希望输出为
# x
# 6 (
# 7 (a)
# 8 (A)
# 1 (Intercept)
# 9 (x)
# 10 (X)
# 3 f3
# 4 i
# 5 j
# 2 x1
是否有任何设置可以控制术语的排序方式或发生的情况?我的同事获得了运行相同代码的预期输出。
R> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Arch Linux
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C 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 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] setwidth_1.0-4 colorout_1.1-2
答案 0 :(得分:1)
正如评论中所述,这似乎与locale
使用而不是R
有关。我在bash中遇到了同样的问题。
$ echo "a\n(I)\n(\nx" | sort
(
a
(I)
x
但如果我设置LC_ALL=C
,我会得到预期的结果。
$ echo "a\n(I)\n(\nx" | LC_ALL=C sort
(
(I)
a
x
启动R w LC_ALL=C
时,我得到了预期的结果。
dat <- data.frame(x=c('(Intercept)', 'x1', 'f3', 'i', 'j', '(', '(a)', '(A)', '(x)', '(X)'), stringsAsFactors=F)
dat[order(dat$x), ,drop=F]
# x
# 6 (
# 8 (A)
# 1 (Intercept)
# 10 (X)
# 7 (a)
# 9 (x)
# 3 f3
# 4 i
# 5 j
# 2 x1
以下是我系统的区域设置供参考:
$ locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=