focal_hpc:加速 R 中的栅格分析
focal_hpc: speed up raster analysis in R
我有一个非常大的光栅文件(行数=14810;列数=12392),我想使用'focal'函数对windows进行平均(平均函数)特定尺寸(例如 5 像素 X 5 像素)。我曾经在 R(光栅 R 包)中应用 'focal' 函数。但是,对于这么大的栅格大小,该功能非常慢。
我知道 'spatial.tools' 中有一个名为 'focal_hpc' 的函数可以加速焦点处理(并行)。但是,我不知道如何指定 'mean' 函数。我使用了以下脚本:
require(raster)
require(spatial.tools)
tahoe_highrez <- brick(system.file("external/tahoe_highrez.tif", package="spatial.tools"))
res<-focal_hpc(x=tahoe_highrez,fun=mean,window_dims=c(5,5))
但是它给了我这个错误:
Error in (function (x, ...) :
call to standardGeneric("mean") apparently not from the body of that generic function
有人体验过这个包和功能吗?
嗯。我也是:
> res<-focal_hpc(x=tahoe_highrez,fun=mean,window_dims=c(5,5))
Error in (function (x, ...) :
call to standardGeneric("mean") apparently not from the body of that generic function
但是如果你创建一个函数来做同样的事情:
> f = function(...){mean(...)}
有效...
> res<-focal_hpc(x=tahoe_highrez,fun=f,window_dims=c(5,5))
Warning messages:
1: In .local(x, ...) : min value not known, use setMinMax
2: In .local(x, ...) : max value not known, use setMinMax
3: In .local(x, ...) : min value not known, use setMinMax
> res
class : RasterBrick
dimensions : 400, 400, 160000, 1 (nrow, ncol, ncell, nlayers)
resolution : 5.472863e-06, 5.472863e-06 (x, y)
extent : -119.9328, -119.9306, 39.28922, 39.29141 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
source : /tmp/Rtmp2WTR9g/file5f335faf907.grd
names : layer
我怀疑它与泛型函数的调度方式有关。制作一个测试栅格以确保我的函数替换正在计算你想要取平均值的事物的平均值,并阅读文档以获取更多为 focal_hpc
.
编写函数的示例
我有一个非常大的光栅文件(行数=14810;列数=12392),我想使用'focal'函数对windows进行平均(平均函数)特定尺寸(例如 5 像素 X 5 像素)。我曾经在 R(光栅 R 包)中应用 'focal' 函数。但是,对于这么大的栅格大小,该功能非常慢。
我知道 'spatial.tools' 中有一个名为 'focal_hpc' 的函数可以加速焦点处理(并行)。但是,我不知道如何指定 'mean' 函数。我使用了以下脚本:
require(raster)
require(spatial.tools)
tahoe_highrez <- brick(system.file("external/tahoe_highrez.tif", package="spatial.tools"))
res<-focal_hpc(x=tahoe_highrez,fun=mean,window_dims=c(5,5))
但是它给了我这个错误:
Error in (function (x, ...) :
call to standardGeneric("mean") apparently not from the body of that generic function
有人体验过这个包和功能吗?
嗯。我也是:
> res<-focal_hpc(x=tahoe_highrez,fun=mean,window_dims=c(5,5))
Error in (function (x, ...) :
call to standardGeneric("mean") apparently not from the body of that generic function
但是如果你创建一个函数来做同样的事情:
> f = function(...){mean(...)}
有效...
> res<-focal_hpc(x=tahoe_highrez,fun=f,window_dims=c(5,5))
Warning messages:
1: In .local(x, ...) : min value not known, use setMinMax
2: In .local(x, ...) : max value not known, use setMinMax
3: In .local(x, ...) : min value not known, use setMinMax
> res
class : RasterBrick
dimensions : 400, 400, 160000, 1 (nrow, ncol, ncell, nlayers)
resolution : 5.472863e-06, 5.472863e-06 (x, y)
extent : -119.9328, -119.9306, 39.28922, 39.29141 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
source : /tmp/Rtmp2WTR9g/file5f335faf907.grd
names : layer
我怀疑它与泛型函数的调度方式有关。制作一个测试栅格以确保我的函数替换正在计算你想要取平均值的事物的平均值,并阅读文档以获取更多为 focal_hpc
.