我经常使用rasterize
包中的raster
函数。如其文档中所示,通过fun
参数使用的任何自定义函数都需要接受na.rm
参数。这通常意味着自定义函数使用'dots'编写,即:
funA <- function(x,...)length(x)
但是,第二种方法是使用显式na.rm
参数编写自定义函数。文档中给出的示例是:
funB <- function(x, na.rm) if (na.rm) length(na.omit(x))
然而,这似乎不起作用!此示例中,一些随机点分布在网格中失败:
# Create a grid
grid <- raster(ncols=36, nrows=18)
# Scatter some random points within the grid
pts <- spsample(as(extent(grid), "SpatialPolygons"), 100, type = "random")
# Give them a random data field
pts <- SpatialPointsDataFrame(pts, data.frame(field1 = runif(length(pts))))
# Try rasterize
rasterize(pts, grid, field = "field1", fun = funB)
这里有什么我想念的吗?
谢谢! 安德鲁
答案 0 :(得分:1)
你很亲密。
功能B应如下所示:
funB <- function(x, na.rm=T) if (na.rm) length(na.omit(x))
rasterize(pts, grid, field = "field1", fun = funB)
na.rm
参数为TRUE
或FALSE
,添加默认值即可解决问题。
仍然让我感到恼火的是:
funB <- function(x, na.rm) if (na.rm) length(na.omit(x))
rasterize(pts, grid, field = "field1", fun = funB, na.rm=TRUE)
应该有效,但事实并非如此。这可能与光栅包有关。