В
R вашу задачу через библиотеку
"raster" можно решить
"многострочно-пошагово" через процедурный
for-цикл
(без семейства директив
apply и
map функциональной парадигмы, которая, конечно, в
R славная-таки доминанта - но так "привычно-понятней" и детализировать, и комментировать можно каждый
"шажок"):
Код: Выделить всё
#Подключаем библиотеку "raster"
library("raster")
#Папка с исходными
InputDir <- file.path("C:", "Input")
#Папка с записываемыми
OutputDir <- file.path("C:", "Output")
#Получаем список исходных
ListInput <- list.files(InputDir, full.names = TRUE)
#Сколько всего исходных
nFiles <- length(ListInput)
#Цикл по списку исходных
for ( i in seq_along(ListInput) ) {
#Имя текущего файла
NameInputRstr <- ListInput [ i ]
#Короткое имя текущего файла
BaseName <- basename( NameInputRstr )
#Читаем исходный
CurrentBrickRstr <- raster::brick( NameInputRstr )
#Извлекаем первый band
BandFirst <- CurrentBrickRstr [[ 1 ]]
#Генерируем короткое имя выходного
NameOutputBand <- paste0( "FirstBand_", BaseName)
#Полное имя выходного
PathNameOutputRstr <- file.path( OutputDir, NameOutputBand )
#Пишем первый band в файл
writeRaster(BandFirst, PathNameOutputRstr, format="GTiff", overwrite=TRUE)
#Удаляем из памяти то, с чем отработали
rm(CurrentBrickRstr)
rm(BandFirst)
#Информационная строка о ходе работы (базовые имена входного, выходного, какой по счёту файл...)
StringPrint <- paste0( BaseName, " ==> ", NameOutputBand, " Counter: ", as.character(i), " from ", as.character(nFiles) )
#Печать информационной строки
print( StringPrint )
}
Если есть коллеги у вас, которые c
R работали, - то помогут его поставить за минут 10-15-ть...
Нет таковых ребят рядом - та и сами можете по-Google'ить и за полчасика-академический чвс справиться... Успеха, Удачи!