2016-06-25 12 views
0

calc 래스터 함수에 사용하기 위해 작성된 함수 내에서 this example과 같은 진행률 막대를 어떻게 사용할 수 있습니까?래스터 계산 기능에서 진행률 막대를 표시하는 방법은 무엇입니까?

나는 처리해야 할 거대한 데이터 세트가 있으며 프로세스 진행 시간을 제어하기 위해 진행률 막대를 사용하고자합니다. 이런 식으로 사용하려고하면 프로세스의 함수가 완벽하게 작동하지만 진행률 표시 줄을 표시하지 않습니다.

# PROGRESS BAR IN CALC RASTER EXAMPLE 
# create data 
r <- raster(nrow=10, ncol=10) 
dataset <- list() 
for (i in 1:20) { 
    dataset[i] <- setValues(r, rnorm(ncell(r), i, 3)) 
} 
dataset <- stack(dataset) 

## function to apply 
pixel <-getValuesBlock(s1, row=1, nrows=1, col=1, ncols=1, lyrs=1:nlayers(s1)) 
CropAnalysis <- function (pixel, ...){ 
gc() 
pb <- txtProgressBar(...) 
# test : if is No data the return is 
if (identical(x = is.na(pixel), y = rep(TRUE,length(pixel)))) {NA}else{ 
averageOfhigher <- mean(pixel[pixel > 10], na.rm=T) 
averageOflower <- mean(pixel[pixel < 10], na.rm=T) 
return(c(averageOfhigher, averageOflower)) 
} 
setTxtProgressBar(pb)} 

# applying calc finction 
data_process<-calc(x=dataset, fun=CropAnalysis, forcefun=TRUE, forceapply=TRUE) 

답변

2

당신은 raster 패키지의 대부분의 기능에 구축되는 progress 인수를 사용할 수 있습니다. 청크로 쓰는 경우에만 표시됩니다 (데이터 세트가 크기 때문에).

# example data 
library(raster) 
r <- raster(nrow=10, ncol=10) 
d <- stack(lapply(1:20, function(i) setValues(r, rnorm(ncell(r), i, 3)))) 

f <- function(pixel, ...){ 
    if (all(is.na(pixel))) { 
     c(NA, NA) # note the two NAs to match the other case 
    } else { 
     averageOfhigher <- mean(pixel[pixel > 10], na.rm=TRUE) 
     averageOflower <- mean(pixel[pixel < 10], na.rm=TRUE) 
     c(averageOfhigher, averageOflower) 
    } 
    } 

스크립트에서 아래 줄을 사용하지 마십시오. 단지 진행 표시 줄이

rasterOptions(todisk=TRUE) 

표시하도록 덩어리에 쓰기 트리거이 장난감 예에 필요하지만 progress 인수 ("텍스트"또는 "창"중 하나)을 사용합니까

r <- calc(d, fun=f, progress='text') 
+0

HI @ 로버트 H, 나는 당신의 제안을 적용하고 진도 표시 줄이 없다. 단지 진행의 시작과 끝 뿐이다. 이 문제를 해결하는 방법? –

+0

은 많은 데이터가 없다고 제안합니다. rasterOptions의 작은 chunkize를 설정하여 더 많은 단계를 수행 할 수 있습니다. (조금 느려질 수도 있습니다) – RobertH

+0

progress = "text"를 사용하면 콘솔은 항상 "| 0 %"만 표시하지만 진행률을 적용하면 = "window"는 tcltk 패키지의 화면을 진행 상태로 표시합니다. –