簡體   English   中英

在函數中使用R替換for循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM