Как вы пишете несколько растров в [r]? - PullRequest
0 голосов
/ 25 января 2020

Я использую lapply () для загрузки 144 растров, как в моем предыдущем посте: Как загрузить несколько растров в [r], используя для l oop?

library(raster)
rastlist <- list.files(path=path, pattern='tif$', full.names=TRUE)
allrasters <- lapply(rastlist, raster)

allrasters заканчивается большим списком из 144 элементов, из которых «имя» выглядит как один из атрибутов, я вставил последний (144-й) вывод элемента ниже.

[[144]] класс: RasterLayer размеры: 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 + элемент = NAD83 + единицы = m + no_defs + ellps = GRS80 + towgs84 = 0,0,0 источник: T: //abbreviatedpath/sample.tif имена: wildcard1_name_wildcard2 значения: -32768, 32767 (мин, макс)

Я хотел бы выполнить некоторую обработку на подмножества этих растров основаны на подстановочных знаках в именах. то есть, я хотел бы замаскировать те, у которых есть wildcard1 = x, и сохранить эти выходные данные в качестве имени входного растра, к которому добавлено "_m". Позже я хотел бы написать mosai c подмножество моего списка аллостеров, основанного на wildcard2 = y.

Мои попытки извлечь список растров на основе шаблона в именах из уже загруженного списка растров (allrasters) потерпели неудачу.

rast.x<-grep("x",allrasters) 

дает вектор из 6 чисел списка, которые соответствуют растрам, которые я пытаюсь выделить в подмножество. Может быть, это лучший подход?

Единственный обходной путь, который я нашел, - это прибегнуть к другому процессу / конвейеру: сначала создайте списки подмножеств, затем загрузите растры в списки подмножеств с помощью 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
Пост https://gis.stackexchange.com/questions/301956/write-multiple-rasters-in-r никогда Казалось, что проблема решена, и, возможно, это не сработало, потому что из-за проблемы использования объекта-для-l-1033 * -on-an-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")) "

Любые идеи о том, как записать из списка несколько растров, которые не сложены или имеют одинаковый экстент ? И дать им имена, которые являются входными именами с добавлением чего-то? Спасибо!!

1 Ответ

0 голосов
/ 25 января 2020

Попробуйте с этим кодом, он должен работать.

lapply(allrast.HIGH_m, function (x) writeRaster(x, filename=paste0(path,"/masked/",names(x),"_m"), format="GTiff"))
...