Один из подходов может заключаться в преобразовании в трехмерный массив и использовании apply
:
library(raster)
set.seed(1)
r1 <- raster(matrix(sample(1:100, 20), 10,10))
r2 <- raster(matrix(sample(1:100, 50), 10,10))
r3 <- raster(matrix(sample(1:100, 10), 10,10))
allrasters <- stack(r1, r2, r3)
apply(as.array(allrasters),3,function(x)length(unique(as.vector(x))))
[1] 20 50 10
Это не обязательно тот вопрос, который вы задали, но, если он возникает у вас, вы также можете подать заявку в стек растров с использованием apply
.
apply(as.array(allrasters),c(1,2),function(x)length(unique(x)))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 3 3 3 3 3 3 3 3 3 3
[2,] 3 3 3 3 3 3 3 3 3 3
[3,] 3 2 3 3 3 3 2 3 3 3
[4,] 3 3 3 2 3 3 3 3 2 3
[5,] 3 3 3 3 3 3 3 3 3 3
[6,] 3 3 3 3 3 3 3 3 3 3
[7,] 3 3 3 3 3 3 3 3 3 3
[8,] 3 3 3 3 3 3 3 3 3 3
[9,] 3 3 3 3 3 3 3 3 3 3
[10,] 3 3 3 3 3 3 3 3 3 3