我有一个简单的功能,将栅格对象分成三个不同的类。但是我的功能并没有返回这些栅格。我还阅读了本教程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()
编辑:添加了可重现的示例
答案 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)