你如何在 [r] 中编写多个光栅?
How do you write multiple rasters in [r]?
我正在使用 lapply() 加载 144 个栅格,就像我之前的 post 一样:
library(raster)
rastlist <- list.files(path=path, pattern='tif$', full.names=TRUE)
allrasters <- lapply(rastlist, raster)
allrasters 最终成为一个包含 144 个元素的大列表,其中 'name' 看起来像其中一个属性,我在下面粘贴了最后一个(第 144 个)元素输出。
[[144]]
class:栅格图层
尺寸:405、345、139725(nrow、ncol、ncell)
分辨率 : 30, 30 (x, y)
范围:-971895、-961545、1463535、1475685(xmin、xmax、ymin、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(最小值、最大值)
我想根据名称中的通配符对这些栅格的子集进行一些处理。即,我想用 wildcard1=x 屏蔽那些并将该输出保存为附加“_m”的输入栅格名称。稍后我想根据 wildcard2=y 镶嵌我的 allrasters 列表的一个子集。
我努力根据名称中的模式提取光栅列表
已加载的栅格列表 (allrasters) 失败。
rast.x<-grep("x",allrasters)
产生与我试图提取到子集中的栅格相关的 6 个列表数字的向量。也许这是更好的方法?
我发现的唯一解决方法是使用不同的方法 process/pipeline:
首先创建子集列表,然后使用 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
post https://gis.stackexchange.com/questions/301956/write-multiple-rasters-in-r 似乎从未得到解决,也许它不起作用,因为它是在 S4 对象上使用循环的问题。
编写所有这些栅格的 lapply() 方法似乎不起作用:
lapply(allrast.HIGH_m, writeRaster(filename=paste0(path),"/masked/",names(allrast.HIGH_m),"_m"), format="GTiff"))
此代码给出了错误:错误:"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"))
我正在使用 lapply() 加载 144 个栅格,就像我之前的 post 一样:
library(raster)
rastlist <- list.files(path=path, pattern='tif$', full.names=TRUE)
allrasters <- lapply(rastlist, raster)
allrasters 最终成为一个包含 144 个元素的大列表,其中 'name' 看起来像其中一个属性,我在下面粘贴了最后一个(第 144 个)元素输出。
[[144]] class:栅格图层 尺寸:405、345、139725(nrow、ncol、ncell) 分辨率 : 30, 30 (x, y) 范围:-971895、-961545、1463535、1475685(xmin、xmax、ymin、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(最小值、最大值)
我想根据名称中的通配符对这些栅格的子集进行一些处理。即,我想用 wildcard1=x 屏蔽那些并将该输出保存为附加“_m”的输入栅格名称。稍后我想根据 wildcard2=y 镶嵌我的 allrasters 列表的一个子集。
我努力根据名称中的模式提取光栅列表 已加载的栅格列表 (allrasters) 失败。
rast.x<-grep("x",allrasters)
产生与我试图提取到子集中的栅格相关的 6 个列表数字的向量。也许这是更好的方法?
我发现的唯一解决方法是使用不同的方法 process/pipeline: 首先创建子集列表,然后使用 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
post https://gis.stackexchange.com/questions/301956/write-multiple-rasters-in-r 似乎从未得到解决,也许它不起作用,因为它是在 S4 对象上使用循环的问题。
编写所有这些栅格的 lapply() 方法似乎不起作用:
lapply(allrast.HIGH_m, writeRaster(filename=paste0(path),"/masked/",names(allrast.HIGH_m),"_m"), format="GTiff"))
此代码给出了错误:错误:"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"))