繁体   English   中英

如何在 [r] 中编写多个栅格?

[英]How do you write multiple rasters in [r]?

我正在使用 lapply() 加载 144 个栅格,就像我之前的帖子一样: 如何使用 for 循环在 [r] 中加载多个栅格?

library(raster)
rastlist <- list.files(path=path, pattern='tif$', full.names=TRUE)
allrasters <- lapply(rastlist, raster)

allrasters 最终成为一个包含 144 个元素的大列表,其中 'name' 看起来像是属性之一,我粘贴了下面的最后一个(第 144 个)元素输出。

[[144]] 类:RasterLayer 尺寸:405、345、139725(nrow、ncol、ncell)分辨率:30、30(x、y)范围:-971895、-961545、1463535、1475685、最小x ymax) crs : +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84= 0,0,0 来源:T://abbreviatedpath/sample.tif 名称:wildcard1_name_wildcard2 值:-32768、32767(最小值、最大值)

我想根据名称中的通配符对这些栅格的子集进行一些处理。 即,我想用通配符1 = x 屏蔽那些并将该输出保存为附加有“_m”的输入栅格名称。 后来我想根据通配符 2=y 镶嵌我的所有栅格列表的一个子集。

我从已加载的栅格列表(所有栅格)中根据名称中的模式提取栅格列表的努力失败了。

rast.x<-grep("x",allrasters) 

产生与我试图提取到子集中的栅格相关的 6 个列表数字的向量。 也许这是一个更好的方法?

我发现的唯一解决方法是使用不同的流程/管道:首先创建子集列表,然后使用 lapply 加载子集列表中的栅格,然后使用 lapply 将函数应用于子集列表中的栅格,如下所示:

rastlist.HIGH <- list.files(path=path, pattern='HIGH', full.names=TRUE)
allrast.HIGH <- lapply(rastlist.HIGH, raster)
allrast.HIGH_m<-lapply(allrast.HIGH,mask,HIGH_mask,updatevalue=NA,updateNA=FALSE)

这个过程似乎正在起作用,但现在我被困在如何在列表 allrast.HIGH_m 中编写栅格
帖子https://gis.stackexchange.com/questions/301956/write-multiple-rasters-in-r似乎从未得到解决,也许它不起作用,因为它使用了 using-a-for-loop-关于 S4 对象的问题。
lapply() 编写所有这些光栅的方法似乎不起作用:

lapply(allrast.HIGH_m, writeRaster(filename=paste0(path),"/masked/",names(allrast.HIGH_m),"_m"), format="GTiff"))

这段代码给了我错误:错误:意外 ')' in "lapply(allrast.HIGH_m, writeRaster(filename=paste0(path),"/masked/",names(allrast.HIGH_m),"_m"), format= "GTiff"))"

关于如何从列表中编写多个未堆叠或范围相同的栅格的任何想法? 并给他们命名,即输入名称后附加一些东西? 谢谢!!

尝试使用此代码,它应该可以工作。

lapply(allrast.HIGH_m, function (x) writeRaster(x, filename=paste0(path,"/masked/",names(x),"_m"), format="GTiff"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM