如何在光栅计算功能中显示进度条?

How to show the progress bar in raster calc function?

如何在为 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)

您可以使用 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 参数("text" 或 "window")

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

一个简单的解决方案
您可以使用栅格包中内置的 rasterOptions 函数。
为例 rasterOptions(progress = 'text',timer=TRUE) 将向您展示进度,如您展示的示例,以及光栅包中每个使用函数的时间。
检查此 link 以获得更多高级选项: https://rdrr.io/cran/raster/man/rasterOptions.html