【问题标题】:R: get number output from density()R:从密度()获取数字输出
【发布时间】:2016-08-09 15:13:11
【问题描述】:

我将 R 用于带有 spatstat 和相关软件包的 GIS 应用程序。我想生成一个内核密度栅格,我已经成功地使用了以下方法:

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

但是,当我将生成的栅格加载到 QGIS 中时,由于像元值是用科学记数法而不是简单的数字编写的,我遇到了问题。

基于this question,我尝试了format(density(),scientific=FALSE),但这导致CPU 出现严重峰值并且需要很长时间才能运行,因此我最终终止了该进程。

我想找到一种方法让 density() 函数输出整数值。或者,也许有一种方法可以将数据帧转换为整数数据类型?

【问题讨论】:

  • 两种可能性:使用例如更改scipen 选项options(scipen=3);使用round 而不是format。我不知道他们是否会更快,但值得一试。

标签: r gis raster scientific-notation


【解决方案1】:

我在这里看到两个选项。

  1. 您可以按照@dash2 的建议使用options(scipen=99) 删除科学记数法。
  2. 将您的值乘以一个因子,例如 1000。尝试一些方法,直到您的值不再采用科学计数法。优点是您的栅格没有选项 1 那么多的前导零,并且占用的硬盘空间更少,但缺点是您必须在 QGIS 中将值乘以该因子。

【讨论】:

    【解决方案2】:

    “科学记数法”与此无关。那是用于文本表示,但是使用 writeRaster 您可以写入数字格式。它们只是实数。

    我认为你可以简化:

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

    问题可能是密度非常低。如果您想要更大的数字(如 jgadoury 建议的那样)

    r <- r * 1000000
    

    可能是圆角

    r <- round(r)
    

    然后

    writeRaster(r, 'file.tif')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 2013-05-26
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      相关资源
      最近更新 更多