列出与R中的条件匹配的文件

时间:2018-04-21 09:46:13

标签: r regex file-search

我有一系列文件。每个文件名都有两个数字。第一个数字是世代号,它可以是0到250之间的数字。下一个数字是1到450之间的型号。

一些例子:

Generation_Flux_0_Model_10.txt
Generation_Flux_0_Model_5.txt
Generation_Flux_1_Model_20.txt
Generation_Flux_2_Model_17.txt
Generation_Flux_5_Model_9.txt
Generation_Flux_55_Model_5.txt
Generation_Flux_117_Model_2.txt
Generation_Flux_8_Model_23.txt

我想仅列出指定的一组代的文件。例如,获取第1代和第8代的文件应仅列出:

  

Generation_Flux_ 1 _Model_20.txt和Generation_Flux_ 8 _Model_23.txt。

我编写了以下行,它只产生二进制值。

reactionFile = list.files(pattern = "\\.txt$")
generations = c(0, 1, 8)
str_extract(reactionFile,"\\d+")%in%generations
  

[1]如果为真,则为假,否则为假,为真假

  1. 有没有办法在中指定此条件 list.files(pattern ="")参数?
  2. 另外哪种方式可以更快地选择唯一需要的文件? 列出目录中的所有文件并获取子集或 使用list.files()?
  3. 仅加载所需的文件

1 个答案:

答案 0 :(得分:1)

尝试这种模式:

list.files(pattern = "^Generation_Flux_[18]_Model_\\d+\\.txt$")

这应该只匹配第1代和第8代,以及任何型号。

如果你有一组任意的世代数,那么你可以动态地建立一个替代,例如

getGens <- function(v) {
    pat <- paste0("(", paste0(v, collapse="|"), ")")
    return(pat)
}

gens <- c(1, 50, 100, 150)      # or any values you wish to use
pat <- paste0("^Generation_Flux_", getGens(gens), "_Model_\\d+\\.txt$")
list.files(pattern = pat)