我有 2 个虚拟机具有相同的 LC_COLLATE 环境变量值:en_US.UTF-8。在一台机器上,我有从第一个开始的下划线字符串排序的文件(我接受所需的排序),在第二台机器上,我有从中间某处列出的下划线开始的字符串
list.files('dir', recursive=TRUE)
在第一台机器上按以下方式排序(这是所需的排序):
_example/abc.R
01_example/123.R
02_example/def.R
site.R
tab.R
在另一台机器上我有以下命令:
01_example/123.R
02_example/def.R
_example/abc.R
site.R
tab.R
值得一提的是,我尝试设置 LC_COLLATE=C 但仍然没有先得到下划线。环境变量已在系统范围内使用 Sys.setlocale() 在 R 中设置。
问题是:我应该怎么做才能实现正确的排序(下划线字符串在前)?
谢谢您的帮助!
您希望区域设置为
"C.UTF8"
。用你的例子:
# Create some files
dirs <- c("_example", "01_example", "02_example")
files <- c("_example/abc.R", "01_example/123.R", "02_example/def.R", "site.R", "tab.R")
lapply(dirs, dir.create)
lapply(files, file.create)
# Locale C
Sys.setlocale(
"LC_COLLATE", "C"
)
list.files()
# [1] "01_example" "02_example" "_example" "site.R" "tab.R"
# Locale C.UTF8
Sys.setlocale(
"LC_COLLATE", "C.UTF8"
)
list.files()
# [1] "_example" "01_example" "02_example" "site.R" "tab.R"