根据预定义的顺序处理列表中的文件

时间:2015-02-24 00:09:22

标签: r

我想根据特定订单处理我的文件。例如,文件名中有一个ID,我想按照以下顺序处理它们:

order <- c("5521","6572","9882","6583")

文件:

6572.txt
5521.bww.txt
6583.rrrwe.txt
9882.tw.txt



files <- list.files()
filelist <- lapply(files, function)
names(filelist) <- paste0(basename((files)))

然后我想根据“订单”进行处理但仍然循环遍历所有文件

我试过循环和grep,但我不认为这是个好主意:

for(i in 1:length(names(filelist))) {

  grep(order[i]..)

  (FUNCTION)
}

1 个答案:

答案 0 :(得分:1)

您需要根据order向量对文件列表进行排序。在您的示例中,order向量包含没有扩展名的basename。您需要以类似方式格式化文件列表。

files <- list.files()
file_no_ext <- sub("^([^.]*).*", "\\1", files))

然后获取file_no_ext 中的元素与 order匹配的索引。使用这些索引重新排序原始files列表。

files <- files[ match(order,file_no_ext) ]
lapply(files, yourFun)

希望这有帮助。如果没有,请告诉我。

修改 您可以使用pmatch

进行部分字符串匹配,而不是删除文件扩展名
files <- files[ pmatch(order, files) ]