'rasterize'文档中的示例不起作用?

时间:2017-02-02 03:16:02

标签: r r-raster

我经常使用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)

这里有什么我想念的吗?

谢谢! 安德鲁

1 个答案:

答案 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参数为TRUEFALSE,添加默认值即可解决问题。

仍然让我感到恼火的是:

funB <- function(x, na.rm) if (na.rm) length(na.omit(x))
rasterize(pts, grid, field = "field1", fun = funB, na.rm=TRUE)

应该有效,但事实并非如此。这可能与光栅包有关。

相关问题