Применение растровой функции к файлам в подпапках - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь применить простую функцию из программы R Raster через файлы GeoTIFF, разделенные на папки.

Мои файлы организованы в папку с именем «GeoTIFFs» с подпапками «a1», «a2»...так далее.Моя цель - просмотреть каждый файл и изменить все растровые значения 3 на 1 для каждого файла .tif в папке GeoTIFFs.

Это код, который я написал до сих пор.С этим много проблем.

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

library(raster)

files = dir('./GeoTIFFs', pattern = '.tif', recursive = TRUE, full.names = TRUE))
nr <- vector("list", length(files))
names(nr) <- files

for (i in 1:length(files)) {
  tmp <- raster(files[i])
  df <- data.frame(id=3, v=1)
  nr[[i]] <- subs(tmp, df, subsWithNA=FALSE)}

Этот код успешноимпортирует все мои файлы (n = 370), но сразу останавливается в цикле for с этой ошибкой:

Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer",  : 
  Cannot create a RasterLayer object from this file. (file does not exist)

Я почти уверен, что это потому, что R думает, что имя файла - 'a1/geotiff_example.tif''geotiff_example.tif'.Я также думаю, что остальная часть кода, вероятно, не работает (за исключением функции подстановки, которая должна), поэтому я хотел бы получить совет о том, как выполнить эту (возможно, довольно простую) задачу.Большое спасибо.

1 Ответ

2 голосов
/ 15 апреля 2019

Ваши файлы не имеют полного пути с частью GeoTIFFs:

> files = dir('./GeoTIFFs', pattern = '.tif')
> files
[1] "bar.tif" "foo.tif"

use full.names=TRUE:

> files = dir('./GeoTIFFs', pattern = '.tif', full.names=TRUE)
> files
[1] "./GeoTIFFs/bar.tif" "./GeoTIFFs/foo.tif"
> 

Используйте полные пути для загрузки tifв растр.

Если вы хотите получить последнюю часть имени пути в пути (то есть, как вы называете свой список, если я правильно прочитал ваш код), тогда используйте basename:

> basename(files)
[1] "bar.tif" "foo.tif"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...