Как исправить "Ошибка в (функция ...) аргументах подразумевает различное количество строк - PullRequest
0 голосов
/ 29 апреля 2019

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

Пример данных

library(raster)
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
ndvi <- stack(r, r*2, r*3)
cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
polys <- spPolygons(cds1, cds2)

Извлечение значений

v <- extract(ndvi, polys)

Запись в файл

write.csv(v, "test.csv")
#Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : arguments imply differing number of rows: 38, 23

str(v)
#List of 2
# $ : num [1:38, 1:3] 326 327 328 329 330 331 332 333 334 335 ...
#  ..- attr(*, "dimnames")=List of 2
#  .. ..$ : NULL
#  .. ..$ : chr [1:3] "layer.1" "layer.2" "layer.3"
# $ : num [1:23, 1:3] 173 208 209 244 245 280 281 282 315 316 ...
#  ..- attr(*, "dimnames")=List of 2
#  .. ..$ : NULL
#  .. ..$ : chr [1:3] "layer.1" "layer.2" "layer.3"

Я надеюсь, что в какой-то момент смогу сделать корреляцию этого сдругой набор данных, использующий распределение значений ячеек изображений NDVI, так что для этого мне нужно иметь рабочий csv всех значений ячеек.Заранее спасибо.

Ответы [ 2 ]

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

v - это список.Каждый элемент списка имеет значения растровых ячеек, которые покрыты многоугольником.Количество ячеек зависит от полигона, поэтому вы не можете превратить это в прямоугольную матрицу.

Это означает, что вы не можете использовать write.csv или View.

Вам нужен файл "csv" в любом случае (как вам нужен определенный тип файла для корреляции)?Вы можете сделать saveRDS(v, "test.rds") вместо этого.

Возможно, вы хотите одно значение для каждого многоугольника?В этом случае вы можете сделать:

v <- extract(ndvi, polys, mean, na.rm=TRUE)
v
#      layer.1  layer.2   layer.3
#[1,] 387.8158 775.6316 1163.4474
#[2,] 329.3913 658.7826  988.1739

write.csv(v, "test.csv")

См. ?raster::extract

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

Мы не знаем, что такое тип объекта vals_03_01, потому что вы не предоставляете информацию об объекте shp.В зависимости от входных данных от растра и sp, выходные данные могут быть совершенно разными.Если объект пространственного вектора содержит полигоны, то vals_03_01 будет списком.Если shp являются точками, то extract возвращает вектор (для отдельного растра) или матрицу (для стека / кирпича, где столбцы представляют каждый растр в стеке).

Пожалуйста, посмотрите на класс, размеры и структуруобъекта vals_03_01 с использованием class, dim и str.Это скажет вам, если ваши данные подходят для записи результатов непосредственно в плоский файл или требуется дополнительная обработка / сводка (например, lapply) перед экспортом.Вполне возможно, что extract вернул список, содержащий матричные объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...