data.table::fwrite 保存文件名时表现奇怪

chi*_*sin 0 r data.table

我有一个非常大的数据框,我正在对 中的列子集执行多个操作lapply,其中包括使用导出子集data.table::fwrite

我有多列字母相同但大小写不同的列(例如 Co2 和 CO2)。当我获取列名并lapply使用dplyr::select选择的正确列运行该过程时(即选择正确的大小写),但是当我导出数据时,某些导出的文件名的大小写不正确,而其他文件名的大小写正确。

例如,下面是一个示例数据框

test_df <- data.frame('CO2' = c(1,2,3,4,5),
                      'Co2' = c(6,7,8,9,10)) 

  CO2 Co2
1   1   6
2   2   7
3   3   8
4   4   9
5   5  10
Run Code Online (Sandbox Code Playgroud)

下面是我用来选择所使用的列的代码,lapply后面是使用的数据集的简单子集lapply(请注意输出与预期一致)。

test_colnames <- test_df %>% colnames()  

lapply(test_colnames, function(x){
  
  var_name <- all_of(x)
    
  export <- test_df %>% 
    select(!!var_name) })

[[1]]
  CO2
1   1
2   2
3   3
4   4
5   5

[[2]]
  Co2
1   6
2   7
3   8
4   9
5  10
Run Code Online (Sandbox Code Playgroud)

当我尝试使用下面的代码导出子集时,我只得到一个输出文件(而不是两个),该文件名为 CO2,但包含来自 Co2 的数据。不知何故,Co2 已大写作为输出名称(但不是列名称)并覆盖 CO2 文件。

lapply(test_colnames, function(x){
  
  var_name <- all_of(x)
    
  export <- test_df %>% 
    select(!!var_name) 
  
  export %>% data.table::fwrite(paste0(data_directory, "test_out_", all_of(x), ".csv")) })
Run Code Online (Sandbox Code Playgroud)

仅输出一个名为 test_out_CO2.csv 的文件,但以下是该文件的内容。

  Co2
1   6
2   7
3   8
4   9
5  10
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题有什么想法吗?


编辑:简化的示例,下面将仅输出一个文件 - “testName.txt”:

library(data.table)
fwrite(mtcars[1:2], "testName.txt")
fwrite(mtcars[3:4], "testname.txt")
Run Code Online (Sandbox Code Playgroud)

zx8*_*754 5

这不是data.table特定的问题,Windows 文件名不区分大小写。

我建议使列名非常独特:

colnames(test_df) <- make.unique(tolower(colnames(test_df)), sep = "_")
colnames(test_df)
# [1] "co2"   "co2_1"

# ... rest of your code
Run Code Online (Sandbox Code Playgroud)