更改 %>% 管道内的栅格值

Change raster values within a %>% pipe

我有一个栅格,其中我感兴趣的数据(物种存在)值为 1,其余为 0(不存在)或 NA。 我正在尝试使用 magrittr 和 dplyr,并且在管道内,我想将所有 0 值更改为 NA,这样我可以稍后 trim 栅格并获取物种所在数据的最小和最大坐标(值 = 1)

但是,将值 0 更改为 NA 是我通常会做的事情,例如:

raster[values(raster) == 0] <- NA

我无法使用 magrittr 进行此类操作,"from right to left"(它们可以完成吗?)。我了解到 names() <- 可以被 setNames() 交换,或者您可以使用 `` 符号来使用操作符号(即:raster %>%*(raster2) 乘以另一个光栅)`

有没有办法用管道获得相同的结果?

谢谢!!!

一种方法是使用 raster::reclassify:

library(raster)
library(magrittr)
r <- raster(matrix(0:3, 2))

r %>% reclassify(c(0, 0, NA), right=NA)

这也可能比@MrFlick 的好 zero_to_na 建议(无论如何,在更大的栅格上!)稍微快一点,以防你做很多这样的事情。权衡是它显然不够优雅。

r <- raster(matrix(rbinom(1e6, 1, 0.5), 1e3))
microbenchmark::microbenchmark(
    this=r %>% reclassify(c(0, 0, NA), right=NA),
    that=r %>% zero_to_na)

Unit: milliseconds
 expr      min       lq     mean   median       uq      max neval cld
 this 21.77720 22.85843 32.48079 25.05024 26.05527 168.1101   100  a 
 that 29.46083 31.37556 56.32881 33.48350 38.05476 202.8740   100   b