如何在r中的包函数中添加进度条

How to add a progress bar to a package function in r

我是 运行 一个来自 landscapmetrics 包的移动 window 函数。这似乎需要一些时间,因为栅格很大。有一个进度条或类似的东西真的很有帮助。我如何在没有 for 循环或自编码函数的情况下编写这样的代码?我不知道如何提供示例栅格,但这是我的代码:

my.raster <- raster('forest2_nonforest1_min_extent.tif')

#specify window size
moving_window <- matrix(1,nrow=5,ncol=5)

#moving window analysis
tt <- window_lsm(my.raster,
                   window = moving_window,
                   level= "landscape",
                   what = c("lsm_l_ed"))

我需要可视化最后一个功能的进度(#moving window 分析)

不熟悉这个包,但是 window_lsm() 有一个参数 progress,它将在 TRUE 时“打印进度报告”。

否则,据我所知,如果没有任何类型的迭代/循环,就不可能实现真正的进度条。我看到的另一种选择是查看 window_lsm() 的来源;找到最外层的循环(如果有的话);定义您自己的函数的本地版本;并在循环内插入一个递增的进度条(例如使用 progress 包)。 (显然,如果不查看许可/与软件包开发人员讨论,您不会想重新分发它。)

我想另一种选择是以某种方式估计操作可能需要多长时间,例如,根据光栅的大小,然后 运行 在并行过程中使用倒计时器?我的直觉是这很难实施,而且不是特别准确。

函数window_lsm()在内部使用raster::focal(),它本身不提供进度条。因此,如果不编写自己的 loop/moving window 函数,我认为这是不可能的,不幸的是。

如上所述,window_lsm()中的进度参数仅指层和指标,而不是移动window。