如何从 R 中的 lapply 输出中获取特定文件?

How to get particular file from lapply output in R?

我是这样读文件的,好像挺快的:

dirPath = paste0("D:/test")
setwd(dirPath)
SF <- list.files(recursive=T, pattern=paste(".csv"), full.names=TRUE)
myfiles = lapply(SF, fread)

顺丰returns以下数据:

./SubFolderA/1.csv
./SubFolderA/2.csv
./SubFolderA/3.csv

./SubFolderB/1.csv
./SubFolderB/2.csv
./SubFolderB/3.csv

所以,我有两个子文件夹,每个子文件夹中有 3 个 CSV 文件。子文件夹中 CSV 文件的数量始终相同。

问题:给定 myfiles,我如何 select 位于 SubFolderB 中的 CSV 文件?我需要单独访问此子文件夹的 1.csv、2.csv 和 3.csv。

由于 list.files() 只是 returns 一个字符向量,您可以使用 grep 之类的函数来搜索列表中的特定值。如果您想在 "SubFolderB" 中查找文件(并且您不想只在该目录中重新 运行 list.files()),您可以执行

foldB <- grep("/SubFolderB/", SF, value=T)
foldB
# [1] "./SubFolderB/1.csv" "./SubFolderB/2.csv" "./SubFolderB/3.csv"

那么假设文件将以任何特定顺序返回并不是一个好主意。因此,如果您想知道每个文件的 "ID",最好从文件名本身中解析出该信息。例如

gsub("\.[^.]*$","",basename(foldB))
# [1] "1" "2" "3"

我们使用basename()删除文件夹信息,我们使用gsub()删除文件扩展名。