Как зациклить растры, чтобы преобразовать их в data.frames - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть несколько растров, которые я хотел бы преобразовать во фреймы данных.Я могу сделать это вручную один за другим, но это неэффективно.Когда я пытаюсь сделать цикл (используя список или вектор с именами), код не работает, и ошибка R говорит: «Ошибка в as.data.frame.default (x [[i]], необязательно = TRUE): невозможноприведение структуры класса ("RasterLayer", package = "raster") к data.frame "

Я пытался сделать это с помощью функции assign (), но она тоже не работает.При использовании вектора имен я могу получить только R, чтобы создать кадр данных из одного наблюдения, содержащего имя вектора

Когда я делаю это один за другим, R фактически делает то, что я хочу.Мой код для одного растра просто

 #"a" is the name of the raster
r_1 <- as.data.frame(a, xy=TRUE, na.rm=TRUE, centroids=TRUE)

Я пробовал несколько вещей для создания петли, но все не удалось.Сначала я попытался создать вектор и выполнить цикл с помощью функции assign ()

# "a" and "b" are the names of my rasters
o2 <- c("a","b") 

for(i in 1:length(o2)){
  nam <- substr(o2[i],1,nchar(o2))
  assign(nam,as.data.frame(o2[i], xy=TRUE, na.rm=TRUE, centroids=TRUE))
} 

. Но при этом создается только кадр данных с именем a1 с одним наблюдением "a1" и одной переменной.Я тоже пытался составить список

o4 <- list(a,b)
for(i in 1:length(o4)){
 nam <- substr(o4[i],1,nchar(ola4))
r_i <- as.data.frame(o4[i], xy=TRUE, na.rm=TRUE, centroids=TRUE)
}

Ошибка на этот раз говорит: «Ошибка в as.data.frame.default (x [[i]], необязательно = TRUE): невозможно привести класс»структура ("RasterLayer", package = "raster") 'в data.frame "

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

Я сам создал растры, используя разные шейп-файлы.У меня есть более 40 растров со следующими характеристиками: с 8806, высота: 10389, происхождение: -77.6699, 4.94778, размер пикселя: 0,001041666, SRC: EPSG: 4326 - WGS 84 - Geographic.Как я уже сказал, я сам создал растры, и все они имеют одинаковые характеристики.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Когда задаете такой вопрос, всегда включайте некоторые примеры данных (обычно это не ваши данные).Здесь используются три (идентичных) растровых файла

f <- system.file("external/test.grd", package="raster")
ff <- c(f,f,f)

Теперь используйте списки, чтобы выполнить то, что вы хотите.

r <- lapply(ff, raster)
x <- lapply(r, function(i) as.data.frame(i, xy=TRUE, na.rm=TRUE))

Никогда не использовать assign

0 голосов
/ 06 апреля 2019

Вместо цикла вы можете использовать apply:

s=c(raster1,raster2,raster3)
lapply(s, as.data.frame)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...