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

Listing files that match a criteria in R

我有一系列文件。每个文件名都有两个数字。第一个数字是代号,它可以是 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 and Generation_Flux_8_Model_23.txt.

我写了下面一行,它只产生了一个二进制值。

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

[1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE

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

试试这个模式:

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)