我创建了一个需要栅格和矩阵的函数。矩阵的每一行都包含栅格中单元格的坐标。完成我的函数后,返回一个向量,该向量包含通过它的坐标保存在矩阵中的每个单元格的数量:
library(raster)
library(gdistance)
r <- raster(nrow=100,ncol=15)
r[] <- 1:ncell(r)
plot(r)
pts <- matrix(c(-144,72.9,-168,45.9,-144,13.5),ncol=2,nrow=3,byrow=TRUE)
get_cells <- function(raster,points_matrix) {
Cells <- c()
for (i in 1:nrow(points_matrix))
{
Cells[i] <- cellFromXY(raster,c(points_matrix[i,]))
}
return(Cells)
}
现在我想重构我的功能,以便我可以将它与apply()
一起使用。
所以最后我希望能够输入类似的内容:
apply(pts,1,get_cells)
得到相同的结果,但我无法弄清楚如何做到这一点。 任何形式的帮助都非常感谢。
答案 0 :(得分:0)
您可以在apply
函数中定义一个行函数。试试这个
apply(pts,1,function(x) return(cellFromXY(raster,x)))
编辑:
@snoops apply
确实采用与您类似的用户定义函数。你的问题是你的函数中有两个输入参数,而你的代码只提供一个参数。而且你的函数内部不需要循环。
get_cells <- function(x,raster) {
Cells <- cellFromXY(raster,x)
return(Cells)
}
现在这将有效。您可以在应用函数本身内给出函数的其他参数。
apply(pts,1,getCells,raster = r)