R栅格函数,从一个栅格中分割出多个栅格

时间:2015-06-24 12:36:26

标签: r function split raster

我有一个简单的功能,将栅格对象分成三个不同的类。但是我的功能并没有返回这些栅格。我还阅读了本教程http://cran.r-project.org/web/packages/raster/vignettes/functions.pdf 根据它,这是"这是一个非常糟糕的做法" 。然而,正确的方式'看起来过于复杂。真的是没有简单的方法可以做到这一点(即,考虑到函数应该让事情变得更容易,反之亦然)。

我对使用R处理栅格非常陌生,请原谅我的愚蠢问题..

rm(list=ls(all=T))

r <- raster(ncol=10, nrow=10)
r[] <- rnorm(100,100,5)

# Create split function // three classes
splitrast <- function(rast, quantile) {
  print("Splitting raster...")
  (q <- quantile(rast, probs=quantile))
  r1 <- rast; r2 <- rast; r3 <- rast # copy raster three times

  r1[rast > q[1]] <- NA                    #raster value less than .25 quantile
  r2[rast <= q[1] | rast >= q[2]] <- NA    #raster values is between quantiles
  r3[rast < q[2]] <- NA                    #raster values is over .75 quantile
  par(mfrow=c(1,3))
  plot(r1);plot(r2);plot(r3)
  rast <-   brick(r1,r2,r3)
  return(rast)
}

splitrast(r,c(0.2,0.8))
ls()

编辑:添加了可重现的示例

2 个答案:

答案 0 :(得分:1)

请勿尝试单独归还。而是return(list(r1,r2,r3))。但请参阅关于风格的评论。

答案 1 :(得分:0)

R栅格subset功能可以在这里提供帮助。返回砖块后,您可以将每个波段分组为单独的栅格。

# split the raster - returns a three band stack
rasters = splitrast(r,c(0.2,0.8))

# subset each band of the stack as a separate raster
r1 = subset(rasters, 1)
r2 = subset(rasters, 2)
r3 = subset(rasters, 3)

# proof - plot the separate rasters - same as those plotted in the function
plot(r1);plot(r2);plot(r3)