[英]replace for loop with apply in R within a function
我創建了一個需要柵格和矩陣的函數。矩陣的每一行都包含柵格中單元格的坐標。 完成我的函數后,返回一個向量,該向量包含通過它的坐標保存在矩陣中的每個單元格的數量:
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函數本身中給出函數的其他參數。
apply(pts,1,getCells,raster = r)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.