открыть растр в R! и некоторая статистическая операция

#r #gis #aggregate #raster

#r #гис #агрегировать #растр

Вопрос:

Я хотел бы открыть растровые файлы (в формате ASCII или TIFF), объединить их ячейки и после этой операции подсчитать корреляцию между значениями в этом новом растровом файле и другом. К сожалению, я не знаю, что не так в моих командах — я получаю сообщение об ошибке:

 x <- GDAL.open('~/Pulpit/dods/karol/TVDI 113_121/TVDI_kamp_evi_TRANSF.asc') 
  

ОШИБКА CPL 4: `~/Pulpit/dods/karol/TVDI 113_121/TVDI_kamp_evi_TRANSF.asc’ не существует в файловой системе и не распознается как поддерживаемое имя набора данных.

Ошибка в .local(.Object, …) : `~/Pulpit/dods/karol/TVDI 113_121/TVDI_kamp_evi_TRANSF.asc’ не существует в файловой системе и не распознается как поддерживаемое имя набора данных.

Комментарии:

1. Начните с основ, переназначение «r» из установленного (системного) файла с вашим собственным локальным путем к файлу, возможно, и нормально, но нечитаемый, неформатированный и совершенно непонятный код — нет. Пожалуйста, немного подумайте о том, что вы просите, и, уделите этому некоторое время, подумайте о том, что кто-то, возможно, должен сделать, чтобы посочувствовать вашей проблеме.

2. Здесь есть два вопроса, IMO: 1) как мне считывать растровые данные GISy в респектабельный объект R, 2) как мне разумно агрегировать данные из респектабельных объектов R. Я не думаю, что 2) действительно стоит рассматривать как часть этого вопроса, поскольку для этого есть много других ресурсов. 1), возможно, сложнее изучить.

3. Возможно, попробуйте fn <- file.choose(); x <- GDAL.open(fn) убедиться, что вы получаете файл, который действительно существует. Также рассмотрите возможность переименования соответствующим образом, чтобы избежать пробелов в пути к файлу, которые могут все испортить.

Ответ №1:

Если у вас возникли проблемы с получением имен файлов, вы могли бы сделать это:

 my_asc_files = dir("../somepath", pattern="*.asc", recursive=T, full.names=T)
files_I_want = my_asc_files[c(1,12,32,33)]
  

Затем вы можете загрузить свои файлы следующим образом

 library(raster)
my_rasters = lapply(files_I_want, raster)
  

Затем вы можете сделать это:

 pairs(my_rasters) 
  

и это:

 for(i in 1:length(my_rasters)) 
  for(j in i:length(my_rasters))   
    if(i != j) {
      df = na.omit(data.frame(values(my_rasters[[i]]), values(my_rasters[[j]])))
      cor(df[,1], df[,2])
    }
  

Хотя вы столкнетесь с проблемами, если растры будут настолько большими, что вы не сможете одновременно хранить два в памяти. Без лучшего вопроса будет трудно дать вам лучший совет.

Комментарии:

1. или просто: s <- stack(files_I_want); пары (ы)

Ответ №2:

Чтобы прочитать (открыть) растр, один из способов — использовать readGDAL :

 library(rgdal)
r <- readGDAL("~/myhome/thisdir/IhaveaFile.asc")
  

Это мое личное предпочтение, и единственная причина для иного использования GDAL.open or raster заключается в том, что на моем компьютере недостаточно оперативной памяти ( abit) для обработки рассматриваемого набора данных.

Комментарии:

1. r <- readGDAL(‘home/mateuszk/Pulpit/dods/karol/TVDI 113_121/TVDI_kamp_evi_TRANSF.asc’) ОШИБКА CPL 4: home/mateuszk/Pulpit/dods/karol/TVDI 113_121/TVDI_kamp_evi_TRANSF.asc' does not exist in the file system, and is not recognised as a supported dataset name. Error in .local(.Object, ...) : home/mateuszk/Pulpit/dods/karol/TVDI 113_121/TVDI_kamp_evi_TRANSF.asc’ не существует в файловой системе и не распознается как поддерживаемое имя набора данных.

2. Я не знаю, почему я получаю ошибку tnis… Возможно, такого рода операции намного проще в GRASS GIS (насколько я знаю, в более простом QGIS нет такой функции, как aggregate)

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

4. Требуется пространство (оно содержится в названиях папок)

5. ХОРОШО — я могу открыть растровый файл (используя rgdal), но, к сожалению, я не могу использовать его для агрегатной функции: Ошибка в getS3method (gen, cl, TRUE): отсутствует слот имени «методы» для этого объекта класса «derivedDefaultMethod», как мне его преобразовать (я открываю его с помощью GDAL.open)