2013-11-04 2 views
0

SDM 클래스의 매우 큰 데이터 레이어로 작업하고 있기 때문에 메모리 제한을 피하기 위해 일부 레이어를 여러 블록으로 나누었습니다. 이 블록은 .grd 파일로 작성되었으며 이제 R에 다시 읽어 들이고 병합해야합니다. 나는 R 프로그래밍에 매우 익숙하기 때문에 어떤 도움을 주시면 감사하겠습니다. 내가 지금까지 시도 된 것은 다음과 같습니다 : 내 파일이 coarseBlock.grd에 순차적으로 nBlocks (259)for 루프를 사용하여 여러 .grd 파일로 쓰기

모든 피드 백을 크게 감상 할 수있다 1부터 번호가 매겨집니다

merge.coarse=raster("coarseBlock1.grd") 
for ("" in 2:nBlocks){ 
    merge.coarse=merge(merge.coarse,raster(paste("coarseBlock", ".grd", sep=""))) 
} 

합니다.

답변

0

.grd 파일에 익숙하지 않지만,이 전체 프로세스는 최소한 올바른 방향으로 나아가 야합니다. 모든 .grd 파일 (259을 통해 1) (내가 GRDFolder로 참조 할 것) 같은 폴더에 저장되어있는 가정, 당신이 시도 할 수 있습니다 : for 루프를 사용

merge.coarse <- raster("coarseBlock1.grd") 
for(filename in list.files(GRDFolder)) 
{ 
    temp <- raster(filename) 
    merge.coarse <- rbind(merge.coarse, temp) 
} 
1

또한 R. 일반적으로 느린 for 루프에서 mergerbind과 같은 함수를 사용하면 R이 이러한 함수에 값을 전달하는 방식 때문에 많은 메모리가 사용됩니다.

rasters <- lapply(list.files(GRDFolder), FUN = raster) 
merge.coarse <- do.call(rbind, rasters) 
:이 다음 rbind 기능을 사용하여 축소 할 수있는 목록에 발생합니다 R.로 파일을로드 (자세한 내용은 this tutorial on apply functions 참조)

이 작업을 수행하는 더 효율적인 방법은 lapply를 호출하는 것입니다