У меня есть растровые файлы (.tif) в разных папках (это мои модели). Мне нужно импортировать их в отдельные объекты и обработать их для создания массива (для этого я буду использовать «abind»).
У меня есть большое количество моделей, поэтому я создаю огромный массив данных. Мне удалось создать функцию для чтения и обработки моделей одновременно. Уловка в том, что, возможно, не такая уж хорошая идея - увеличивать массив внутри цикла for из-за сложности набора данных, который может возникнуть при некоторой ошибке.
Как построить функцию для этого, используя функции семейства apply R?
Вот функция, которую я сделал
require(raster)
require(abind)
require(rgdal)
myFunction <- function (x)
{
directories <- list.dirs( x, full.names = TRUE)[-1]
e <- extent(xmin, xmax, ymin, ymax)
rcp <- NULL
for (i in 1:length(directories))
{
models_raw <- stack(list.files(directories[i],pattern = ".tif$", full.names = TRUE))
models_e <- crop( models_raw , e )
val <- values (models_e)
coord <- xyFromCell(models_e, 1:ncell(models_e))
models <- cbind(coord, val)
models <- na.omit(models)
rcp <- abind (rcp, models, along = 3)
}
return(rcp)
}
scenario <- myFunction( x = ".//data//models//")