如何从 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()
删除文件扩展名。
我是这样读文件的,好像挺快的:
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()
删除文件扩展名。