虽然我恭敬地不同意你的名单“巨大”,但你可以使用 lapply 和 reclassify 得到你需要的东西。
lapply
reclassify
lapply 只是像任何for循环那样遍历列表,但是包含在一个漂亮而整洁的函数中。
首先,让我们得到一个可重现的数据集:
library(raster) r <- raster(nrow=26,ncol=42) set.seed(42) list_monthly_stack <- lapply(1:12,function(i) do.call(stack,replicate(16,setValues(r,runif(ncell(r))))))
现在重新分类:
list_monthly_stack_rc <- lapply(list_monthly_stack, function(x) reclassify(x,c(-Inf,0,666,0,666,0),right=FALSE)
第二个论点 reclassify 是重新分类的'矩阵',其值为“from”,“to”,“new value”。
在我们的例子中,这意味着从-Inf到0的所有值将被重新编码为666,并且0到666之间的所有值将被重新编码为0。
争论 right=FALSE 表示间隔将向右打开,因此0将不会重新编码为666,666将不会重新编码为0。
right=FALSE
这正是您在问题中使用逻辑索引进行的操作...这意味着所有已经为0的值将保持为0.并且所有大于666的值将保持其原始值。