我有一个主目录,其中包含几个由光栅文件组成的子文件夹。我想读取子文件夹中的所有文件,但我不想将它们全部放在一起。相反,我希望它们在一个列表中,其中列表的第一个元素是第一个子文件夹中的所有文件,第二个元素是第二个子文件夹中的所有文件,依此类推。我已经找到了一个与我的问题相似的 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)
答案 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, ...)
})
}