пытаясь сократить список файлов - PullRequest
1 голос
/ 13 мая 2010

У меня есть список файлов, и я пытаюсь извлечь все файлы layer1 _ *. Grd. Есть ли способ сделать это в одном выражении grep?

lof <- c("layer1_1.grd", "layer1_1.gri", "layer1_2.grd", "layer1_2.gri", 
"layer1_3.grd", "layer1_3.gri", "layer1_4.grd", "layer1_4.gri", 
"layer1_5.grd", "layer1_5.gri", "layer2_1.grd", "layer2_1.gri", 
"layer2_2.grd", "layer2_2.gri", "layer2_3.grd", "layer2_3.gri", 
"layer2_4.grd", "layer2_4.gri", "layer2_5.grd", "layer2_5.gri", 
"layer3_1.grd", "layer3_1.gri", "layer3_2.grd", "layer3_2.gri", 
"layer3_3.grd", "layer3_3.gri", "layer3_4.grd", "layer3_4.gri", 
"layer3_5.grd", "layer3_5.gri", "layer4_1.grd", "layer4_1.gri", 
"layer4_2.grd", "layer4_2.gri", "layer4_3.grd", "layer4_3.gri", 
"layer4_4.grd", "layer4_4.gri", "layer4_5.grd", "layer4_5.gri")

Я пытался сделать это в два этапа:

list.of.files <- list.files(pattern = c("1_"))
list.of.files <- list.of.files[grep(".grd", list.of.files)]

Может кто-нибудь просветить меня, как сделать это с помощью grep за один шаг? Я наивно пытался передать list () и c () в grep, но, как вы можете себе представить, это не работает.

list.of.files <- list.files()
list.of.files <- list.of.files[grep(list("1_", ".grd"), list.of.files)]

Ответы [ 2 ]

3 голосов
/ 13 мая 2010

Это должно работать для вас:

> lof[grep("layer1_.*.grd", lof)]
[1] "layer1_1.grd" "layer1_2.grd" "layer1_3.grd" "layer1_4.grd" "layer1_5.grd"

Кроме того, просто для уточнения вашей терминологии: ваш список файлов на самом деле не list; это character вектор.

2 голосов
/ 13 мая 2010

Альтернативой stringr является lof[str_detect(lof, "layer1_.*.grd")].

На самом деле, в этом случае вы можете быть более точным в отношении пропущенных символов, поэтому "layer1_[[:digit:]].grd" будет работать здесь как образец и может быть быстрее, если lof очень длинный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...