如何在光栅计算功能中显示进度条?
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
如何在为 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