我有一系列文件。每个文件名都有两个数字。第一个数字是世代号,它可以是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]如果为真,则为假,否则为假,为真假
答案 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)