Список файлов, которые соответствуют критериям в 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 и 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()?

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)
Другие вопросы по тегам