从多个子文件夹中读取文件作为列表

时间:2021-01-06 10:26:13

标签: r list

我有一个主目录,其中包含几个由光栅文件组成的子文件夹。我想读取子文件夹中的所有文件,但我不想将它们全部放在一起。相反,我希望它们在一个列表中,其中列表的第一个元素是第一个子文件夹中的所有文件,第二个元素是第二个子文件夹中的所有文件,依此类推。我已经找到了一个与我的问题相似的 question,但没有任何答案。我知道您可以使用 list.files 递归读取子文件夹中的所有文件,例如

dat.files  <- list.files(path="C:/Main dir",
                         recursive=T,
                         pattern="*.tif$"
                         ,full.names=T)

但这会带来所有文件的单个字符向量,而不是字符向量列表,具体取决于子文件夹位置,例如 [ chr 向量第一个文件夹,chr 向量第二个文件夹,.....等等]

有没有办法做到这一点,或者已经得到了回答?欢迎和感谢任何建议或帮助。

已编辑 根据@stefan 的建议,我通过两个有效的步骤来完成。我会补充我是怎么做的

dir.files  <- list.dirs(path="Main dir", recursive = F) 
dat.files <- lapply(dir.files, list.files)

1 个答案:

答案 0 :(得分:0)

以下函数未经测试,首先获取向量 d 中的子目录,然后遍历这些子目录并获取与 pattern 匹配的文件名。然后它使用一个双 lapply 循环,通过传入参数 reader 的函数读入数据。省略号(点参数)可用于将更多参数传递给 reader

read_files_subdir <- function(path = '.', pattern = NULL, reader = scan, ...){
  reader = match.fun(reader)
  d <- list.dirs(path = path, full.names = TRUE)
  fls_list <- lapply(d, list.files, pattern = pattern, full.names = TRUE)
  lapply(fls_list, function(fls){
    lapply(fls, reader, ...)
  })
}
相关问题