2010-05-13 2 views
1

파일 목록이 있는데 모든 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)] 

는 사람이 어떻게 한 번에 그렙이 작업을 수행하는 가르치 려 수 있습니까? 순진하게 list()와 c()를 grep에 전달하려고 시도했지만, 상상할 수있는 것처럼 작동하지 않습니다.

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

답변

3

이 당신을 위해 작동합니다 :

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

을 또한, 당신의 용어를 명확히하기 위해 : 파일의 목록이 정말 list 아니다; 그것은 character 벡터입니다.

+1

일치하는 값을 얻으려면'grep ("layer1 _. *. grd", lof, value = TRUE)'를 사용할 수 있습니다. – Marek

+0

그리고 "layer1 _. * \\. grd"를 원한다고 생각하십시오. 단일 점은 "한 문자와 일치"를 의미하므로''. *. "'및'". + "'는 동일한 결과를 제공합니다. 'grep ("layer1 _. *. grd", "layer1_xgrd")'를 확인하십시오. – Marek

2

stringr 대체물은 lof[str_detect(lof, "layer1_.*.grd")]입니다.

실제로이 경우 누락 된 문자에 대해 더 구체적으로 지정할 수 있으므로 여기서는 "layer1_[[:digit:]].grd"이 패턴으로 작동하고 lof이 매우 길면 빠를 수 있습니다.

+0

멋진 의견을 보내 주셔서 감사합니다. –

관련 문제