在函数内用 R 中的 apply 替换 for 循环

replace for loop with apply in R within a function

我创建了一个需要栅格的函数,矩阵的 matrix.Every 行包含栅格中单元格的坐标。完成我的函数后 returns 一个向量,其中包含通过坐标保存在我的矩阵中的每个单元格的数量:

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)

并得到相同的结果,但我不知道该怎么做。 非常感谢任何形式的帮助。

您可以在 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)