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

R 如何在光栅计算功能中显示进度条?,r,progress-bar,r-raster,calc,R,Progress Bar,R Raster,Calc,如何像在calc raster函数中使用的函数中一样使用进度条 我有一个巨大的数据集要处理,我希望使用进度条来控制处理的持续时间。我试着这样使用,过程的功能运行得很好,但是,没有显示进度条 # PROGRESS BAR IN CALC RASTER EXAMPLE # create data r <- raster(nrow=10, ncol=10) dataset <- list() for (i in 1:20) { dataset[i] <- setValu

如何像在calc raster函数中使用的函数中一样使用进度条

我有一个巨大的数据集要处理,我希望使用进度条来控制处理的持续时间。我试着这样使用,过程的功能运行得很好,但是,没有显示进度条

# 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)
可以使用光栅包中大多数函数内置的进度参数。因为数据集很大,所以仅在以块形式写入时显示

# 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)
     }
  }
但是一定要使用progress参数text或window

r <- calc(d, fun=f, progress='text')
可以使用光栅包中大多数函数内置的进度参数。因为数据集很大,所以仅在以块形式写入时显示

# 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)
     }
  }
但是一定要使用progress参数text或window

r <- calc(d, fun=f, progress='text')
一个简单的解决方案 您可以使用光栅软件包中内置的rasterOptions功能。 例如 RasterOptionProgress='text',timer=TRUE将显示进度(如示例所示),以及光栅包中每个已用函数的时间。 查看此链接以了解更多高级选项: 一个简单的解决方案 您可以使用光栅软件包中内置的rasterOptions功能。 例如 RasterOptionProgress='text',timer=TRUE将显示进度(如示例所示),以及光栅包中每个已用函数的时间。 查看此链接以了解更多高级选项:

HI@RobertH,我应用你的建议,没有进度条,只有进度的开始和结束。如何解决这个问题?这表明数据不多。您可以在rasterOptions中设置较小的chunksize以获得更多的步骤,但这可能会降低速度。当我使用progress=text时,控制台始终只显示| | | 0%,但是,当我应用progress=window时,将tcltk包中的windown显示为进度。嗨@RobertH,我应用了您的建议,并且没有进度条,只有进步的开始和结束。如何解决这个问题?这表明数据不多。您可以在rasterOptions中设置较小的chunksize以获得更多的步骤,但这可能会降低速度。当我使用progress=text时,控制台始终仅显示| | 0%,但当我应用progress=window时,会将tcltk包中的windown显示为进度。