R 中的文件排序在虚拟机之间有所不同(下划线问题)

问题描述 投票:0回答:1

我有 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 中设置。

问题是:我应该怎么做才能实现正确的排序(下划线字符串在前)?

谢谢您的帮助!

r linux sorting
1个回答
0
投票

您希望区域设置为

"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"
© www.soinside.com 2019 - 2024. All rights reserved.