在函数中使用R替换for循环

时间:2016-04-28 11:15:10

标签: r apply r-raster

我创建了一个需要栅格和矩阵的函数。矩阵的每一行都包含栅格中单元格的坐标。完成我的函数后,返回一个向量,该向量包含通过它的坐标保存在矩阵中的每个单元格的数量:

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)

得到相同的结果,但我无法弄清楚如何做到这一点。 任何形式的帮助都非常感谢。

1 个答案:

答案 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)