代码之家  ›  专栏  ›  技术社区  ›  corvus

R: 从density()获取数字输出

  •  0
  • corvus  · 技术社区  · 8 年前

    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()函数输出整数值。或者,也许有一种方法可以将数据帧转换为整数数据类型?

    2 回复  |  直到 8 年前
        1
  •  0
  •   jgadoury    8 年前

    1. 你可以使用 options(scipen=99) 按照@dash2的建议,删除科学符号。
    2. 将你的值乘以一个因子,例如1000。尝试一些方法,直到你的值不再是科学符号。优点是光栅的前导零不会像选项1那样多,并且占用的硬盘空间更少,但缺点是您必须将QGIS中的值乘以该因子。
        2
  •  0
  •   Robert Hijmans    8 年前

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

    我认为您可以简化:

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

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

    r <- r * 1000000
    

    可能为圆形

    r <- round(r)
    

    然后

    writeRaster(r, 'file.tif')