Единственная проблема заключается в том, что вам нужно использовать матрицы вместо data.frames.
Это должно работать:
library(raster)
set.seed(12345)
output_1 <- matrix(sample(c(0,1), 225, prob=c(0.8,0.2), replace=TRUE), nrow = 15)
set.seed(99999)
output_2 <- matrix(sample(c(0,1), 225, prob=c(0.8,0.2), replace=TRUE), nrow = 15)
output_list <- list(output_2, output_2)
lapply(output_list, function (onedf) {
Rastermat <- raster(onedf)
Clumps <- as.matrix(clump(Rastermat, directions = 8))
tot <- max(Clumps, na.rm=TRUE)
res <- vector("list", tot)
for (i in 1:tot){
res[i] <- list(which(Clumps == i, arr.ind = TRUE))
}
res
})
ПРАВКА, чтобы ответить на ваши дополнительные вопросы:
При условии ваши входные данные представляют собой data.frames, содержащие 0s и 1s , и вы хотите подсчитать количество скоплений 0s , вы можете использовать следующий код, чтобы получить список из числасгустки в каждом data.frame:
sapply(list_of_dfs, function(df) {
rm <- raster(as.matrix(df)-1) # -1 because the clump function counts non-zero values
rc <- clump(rm, directions = 8, gaps = F) # gaps = F to prevent having missing numbers in the chunk numbers
rc@data@max # return the highest chunk number
})