R: получить числовой вывод из плотности ()

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

spatialgrid <- as(density(mypattern,5000,eps=50),'SpatialGridDataFrame')
rastergrid <- raster(spatialgrid)
writeRaster(rastergrid, filename=‘/file.tif’,format=‘GTiff’)

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

Основываясь на этом вопросе, я попробовал format(density(),scientific=FALSE), но это вызвало сильный всплеск загрузки ЦП. и потребовалось очень много времени для запуска, так что я в конце концов убил процесс.

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


person corvus    schedule 09.08.2016    source источник
comment
Две возможности: изменить параметр scipen, используя, например. options(scipen=3); используйте round вместо format. Я не знаю, будут ли они быстрее, но стоит попробовать.   -  person    schedule 09.08.2016


Ответы (2)


Я вижу здесь два варианта.

  1. Вы можете использовать options(scipen=99) для удаления научного обозначения, как это было предложено @dash2.
  2. Умножьте свои значения на коэффициент, например, на 1000. Попробуйте что-нибудь, пока ваши значения не перестанут быть в экспоненциальном представлении. Преимущество заключается в том, что ваш растр не будет иметь столько начальных нулей, как вариант 1, и займет меньше места на жестком диске, а недостаток в том, что вам придется умножать свои значения на этот коэффициент в QGIS.
person jgadoury    schedule 11.08.2016

"Научная нотация" здесь ни при чем. Это для текстового представления, но с writeRaster вы пишете в числовом формате. Это просто реальные цифры.

Я думаю, вы можете упростить:

d <- density(mypattern,5000,eps=50)
r <- raster(d)

Проблема, вероятно, в том, что плотность очень низкая. Если вам нужны большие числа (как предложил jgadory)

r <- r * 1000000

Возможно округлено

r <- round(r)

А потом

writeRaster(r, 'file.tif')
person Robert Hijmans    schedule 11.08.2016