Как загрузить несколько растров в [r], используя для l oop? - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь загрузить 144 растра (.tif), используя al oop, который ссылается на списки, но сталкивается с ошибками. Обратите внимание, что в моем каталоге только 144 файла .tif, и есть отдельные части каждого имени файла. Я не уверен, как лучше создать минимально воспроизводимый пример для этого, поэтому я сократил каталоги и имена файлов.

сначала я загрузил «растровый» пакет и установил свой рабочий каталог, затем я также установил переменную «путь», равную моему рабочему каталогу. Затем я создал список файлов в каталоге

setwd("T:/sample/geotiffs")
path<-"T:/sample/geotiffs"
rastlist <- list.files(path=path, pattern='tif$', full.names=TRUE)

Я попытался написать свой код с синтаксисом из предыдущего поста: Файл не найден в R растре l oop

for (jj in 1:length(mget(rastlist)))  {
  x[jj] <- raster(paste0(rastlist[jj]))
}

Однако я получил следующую ошибку об отсутствии первого файла: «Ошибка: значение для 'T: /sample/geotiffs/geotiff1.tif' not found» *

Я также попытался написать код таким образом без mget () и paste0 (),

x<-vector(mode="logical",length=144)
for(i in 1:length(rastlist))  {
  x[i]<-raster(rastlist[i])
}

Однако я получаю более 50 предупреждений "1: В x [i] <- растр (rastlist [i]): количество заменяемых элементов не кратно длине замены "</p>

Есть идеи? После запуска этого кода мой вектор x кажется вектором с 144 случайными целыми числами, и я не уверен почему - возможно, мне нужен лучший способ инициировать пустой вектор 'x' с длиной, равной моему растлисту?

Ответы [ 2 ]

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

Это должно работать:

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

Если растры имеют одинаковый экстент и разрешение, вы можете сделать это вместо

s <- stack(f)
0 голосов
/ 24 января 2020

Вы пробовали:

x <- purrr:map(rastlist, raster)

...