我有一个由数十层组成的大型光栅堆栈。我想使用
ifel
将每个图层直接保存到磁盘,但是 filename
中的 ifel
函数会创建一个输出文件。 ifel
的帮助文件指向 writeRaster
获取其他参数,但在 writeRaster
中,每个层都是单独保存的,这正是我想要的。
r <- rast(nrows=5, ncols=5, xmin=0, xmax=1, ymin=0, ymax=1)
values(r) <- c(-10:0, NA, NA, NA, 0:10)
s<-r*1.2
r.stack<-c(r, s)
names(r.stack)<-c("r", "s")
t <- rast(nrows=5, ncols=5, xmin=0, xmax=1, ymin=0, ymax=1)
values(t) <- c(rep(1, 5), rep(2, 5), rep(3, 5), rep(2, 5), rep(3, 5))
x <- ifel(t==3, 5, r.stack,
filename=paste("test",names(r.stack), ".tiff", sep=""))
#Warning message:
#[cover] only the first filename supplied is used
输出:具有两个图层的单个 .tiff 文件
所需输出:每个层有两个 .tiff 文件,以层名称命名
writeRaster(x,filename=paste("test",names(r.stack), ".tiff", sep=""))
filename
在ifel()
内部的工作方式有所不同,因为它只能写入单个输出文件。在本例中,它旨在保存对单个输入对象所做的修改。
另一方面,
writeRaster()
接受:
单个文件名,或与 nlyr(x) 一样多的文件名,为每层写入一个文件。
为了达到您想要的结果:
library(terra)
# Create modified version of t SpatRaster
x <- ifel(t == 3, 5, r.stack)
# Write each layer in x to woring directory
writeRaster(x,
filename = paste("test", names(r.stack), ".tiff", sep = ""),
overwrite = TRUE)
# List all tiff files starting with "test" in working directory
list.files(pattern = "^test.*\\.tiff$")
# [1] "testr.tiff" "tests.tiff"
rast("testr.tiff")
# class : SpatRaster
# dimensions : 5, 5, 1 (nrow, ncol, nlyr)
# resolution : 0.2, 0.2 (x, y)
# extent : 0, 1, 0, 1 (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 (EPSG:4326)
# source : testr.tiff
# name : r
# min value : -10
# max value : 5
rast("tests.tiff")
# class : SpatRaster
# dimensions : 5, 5, 1 (nrow, ncol, nlyr)
# resolution : 0.2, 0.2 (x, y)
# extent : 0, 1, 0, 1 (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 (EPSG:4326)
# source : tests.tiff
# name : s
# min value : -12
# max value : 6