在函数内用 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)
我创建了一个需要栅格的函数,矩阵的 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)