У меня есть 4 подпапки, содержащие 5 растров с непрерывными значениями. Итак, создайте цикл с функцией for:
- перечислить эти растровые файлы
- складывать эти файлы в папку, т. е. 4 объекта растровых стека (которые содержат 5 растров)
- Я применил порог, чтобы преобразовать непрерывный растр в двоичный растр
- Наконец, я написал двоичный растр, используя функцию wirte.raster.
Моя проблема находится на этапе 4. Несмотря на то, что я использую аргумент «byLayer = T» в функции writeRaster, сохраненные растры представляли собой растровый стек с 5 бинарными растрами. И я хочу писать его для каждого растра, для каждого файла, для каждого канала
Я очень благодарен, если кто-нибудь поделится со мной своими мыслями
setwd("Vole_raw_mean_Present/")
sub <- list.dirs(full.names=FALSE, recursive=FALSE)
for(j in 1:length(sub)) {
print(sub[j])
h <- list.files(path=sub[j], recursive=TRUE, full.names=TRUE, pattern='.tif')
print(h)
stack_present <- stack(h)
print(stack_present)
binary_0.2 <- stack_present >=0.2
writeRaster(binary_0.2, filename=paste0(sub[j], bylayer = T, suffix = "_bin.tif"), overwrite=TRUE)
}
1 ответ
Это неверно, потому что аргумент "bylayer" теряется, поскольку становится частью имени файла)
writeRaster(binary_0.2, filename=paste0(sub[j], bylayer = T, suffix = "_bin.tif"), overwrite=TRUE)
Должно получиться что-то вроде этого (и это помогает сделать это в два этапа)
f <- paste0(sub[j], "bin.tif")
writeRaster(binary_0.2, filename=f, bylayer=TRUE, overwrite=TRUE)
Проиллюстрировано здесь
library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
dir.create("test")
setwd("test")
writeRaster(b, filename="abc.tif", bylayer=T)
list.files()
#[1] "abc_1.tif" "abc_2.tif" "abc_3.tif"
writeRaster(b, filename="bin.tif", bylayer=T, suffix = paste0("f", 1:3))
list.files(pattern="bin")
#[1] "bin_f1.tif" "bin_f2.tif" "bin_f3.tif"
В качестве альтернативы вы можете перебирать файлы в каждой папке
Похожие вопросы
Новые вопросы
for-loop
Цикл for - это структура управления, используемая многими языками программирования для итерации по диапазону. Это способ повторять операторы несколько раз, пока цикл не закончится. В зависимости от языка это может быть в диапазоне целых чисел, итераторов и т. Д.