2016-07-26 4 views
0

내가 작업하고있는 루프 기능으로 누군가가 나를 도울 수 있기를 바랬다. Google과 Stack Overflow를 광범위하게 검색해 봤지만 정확한 검색 용어를 모르는 상태에서 일부 결과가 누락 될까봐 두려워합니다. 이를 염두에두고이 질문이 이미 제기 된 경우 사전에 사과드립니다. 그러나 누군가가 올바른 해결책을 제시 할 수 있기를 바랍니다. 내가 NASAs MODIS 위성에서 파일의 1000을 다운로드 한 내 데이터일괄 증가 루프

소개

. 내 연구 영역은 넓은 영역을 다루기 때문에 6 타일 영역에 데이터를 다운로드해야했습니다. 결과적으로 다운로드 한 파일 목록은 실제로 탐색기 내의 파일 목록으로 표시 되더라도 6 개의 묶음으로 그룹화됩니다.

몇 가지 초기 처리를하기 위해 R 내의 몇 가지 간단한 for 문을 작성했습니다 (아래 예제에서는 타일을 다시 샘플링하여 raster :: mosaic을 사용하여 서로 꿰맬 수 있습니다.)이 처리는 파일 개별적으로이 단계에서 내가 나의 요구에 완벽하게 아래의 루프를 발견 :

resampled.raster<-list() 

for (l in 1:24){ 
    cat(l,"\n") 
    resampled.raster[[l]]<-resample(rst[[l]], s, method="ngb") 
} 

문제점

을 내 처리의 다음 단계는 6 그룹에서 래스터 모자이크 나를 필요 6의 다음 배치로 이동하기 전에. 예를 들어, 24 파일의 목록, 처음 6 파일의 컬렉션으로 처리하고 다음에 이동하기 전에 목록에 저장해야합니다.이 4 반복 (총 24 파일을 만들기 위해), 나는 루프를 중지하십시오.

내가 인터넷에서 검색 한 가장 가까운 해결책은 here이지만 내 문제의 해결책은 아닙니다.

R 내에서 for 루프를 사용하여 '배치'처리가 가능합니까? 많은 도움을 주셔서 미리 감사드립니다.

+1

나는 '래스터 (raster)'를 한번도 사용하지 않았지만 배치를 선택하기 위해'for (i in seq (1,24, step))'와 함께'step <- 6'과 같은 작업을 할 수 있으며,'batchIndex <- i : (i + step)' – Marcel10

+0

파일 이름 목록을 일괄 처리하여 그룹화 한 .txt 파일을 만들 수 있습니다. – Adam

+0

두 의견 모두에 감사드립니다. 아래의 RobertH의 솔루션이 작동하며이 대답을 수락했습니다. – Simon

답변

0

먼저 resamplemosaic을 사용하는 것이 거의 틀림 없음을 유의하십시오. 이러한 타일이 병합 된 경우 merge을 병합 할 수 있어야합니다.

그룹화해야하는 파일의 이름에는 분명 고유 한 것이 있습니까? 그것이 당신이 사용해야하는 것입니다.

파일 이름 여기

# ff <- list.files() 

장난감 예를

ff <- c('fileA1', 'fileA2', 'fileB1', 'fileB2') 

와 벡터를 받기 그룹을 통해 고유 한 그룹에게

code <- gsub('file', '', ff) 
code <- substr(code, 1, 1) 
uc <- unique(code) 

루프를 가져옵니다

for (u in uc) { 
    files <- ff[u == code] 
    r <- lapply(files, raster) 
    r$filename <- paste0("merged/", u, ".tif") 
    m <- do.call(merge, r) 
} 
+0

안녕하세요. 로버트, 도와 주셔서 대단히 감사합니다. 이것은 정말 우아한 솔루션이며 완벽하게 작동합니다.나는 여전히 프로그래밍에 익숙하지 않으므로 이와 같은 상세한 답변을 통해 실제로 어떤 일이 일어나고 있는지 이해할 수있었습니다. 시간 내 주셔서 다시 한번 감사드립니다. – Simon

+0

앞으로 도움이 될 사람이 있으면 여기에 몇 가지 추가 정보가 있습니다. RobertH가 묻는 것처럼 파일 이름에 고유 한 것이 있습니다. 각 파일의 이름은 다음과 같습니다. MOD15A2.A2016169.h09v07.005.2016183085001 위의 로버트 코드를 사용하여 "MOD15A2"를 제거했습니다. 파일 이름에서 다음 8자를 고유 식별자로 사용합니다 (이 경우 A22016169 임). 내 데이터가 전 세계 6 개의 타일에 걸쳐 있으므로 A2016169를 포함하는 파일이 각각 6 개 있습니다. 이들은 병합 된 6 개의 파일입니다. – Simon