【问题标题】:oneHotEncode a rasterlayer in RoneHotEncode R中的光栅层
【发布时间】:2021-03-12 23:27:30
【问题描述】:

我有一个分类栅格层,我需要对其进行一次热编码,因为我正在使用神经网络来运行物种分布模型(对于一个类),它仅适用于连续预测变量。我已经使用 one-hot 编码数据本身运行了模型,但是为了在地图上进行预测,栅格本身需要以相同的方式进行 one-hot 编码。

RStoolbox 包中,oneHotEncode() 应该做我需要它做的事情,但我无法让它工作

nn.raster<-oneHotEncode(newraster$NLCD_2016_Land_Cover_oreg, classes=values, background = 0, foreground = 1, na.rm = FALSE)

错误信息:

.calcTest(x[1:5], fun, na.rm, forcefun, forceapply) 中的错误: 无法使用此功能。也许在函数参数中添加“...”或“na.rm”?

有人用过这个功能可以帮我解决问题吗?我认为问题来自班级的争论。我的类别是数字的(来自国家土地覆盖栅格),这就是为什么它们在栅格信息中显示为“值”。我需要做些什么来重新分类它们吗?我想我把它们命名错了,但我不确定如何命名。

【问题讨论】:

    标签: r raster one-hot-encoding r-raster


    【解决方案1】:

    如果您没有提供一个最小的、独立的、可重现的示例,这很难帮助您。但是,在快速浏览了RStoolbox::oneHotEncode 之后,我的印象是它和raster::layerize 一样。

    library(raster)
    r <- raster(nrow=20, ncol=20)
    values(r) <- c(rep(NA, 50), rep(1:5, 70))
    r
    #class      : RasterLayer 
    #dimensions : 20, 20, 400  (nrow, ncol, ncell)
    #resolution : 18, 9  (x, y)
    #extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
    #crs        : +proj=longlat +datum=WGS84 +no_defs 
    #source     : memory
    #names      : layer 
    #values     : 1, 5  (min, max)
    
    b <- layerize(r)
    b
    #class      : RasterBrick 
    #dimensions : 20, 20, 400, 5  (nrow, ncol, ncell, nlayers)
    #resolution : 18, 9  (x, y)
    #extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
    #crs        : +proj=longlat +datum=WGS84 +no_defs 
    #source     : memory
    #names      : X1, X2, X3, X4, X5 
    #min values :  0,  0,  0,  0,  0 
    #max values :  1,  1,  1,  1,  1 
    

    相当于terra::separate

    library(terra)    
    r <- rast(nrow=5, ncol=5)
    values(r) <- rep(c(1:4, NA), each=5)
    b <- separate(r)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2019-04-22
      • 2021-09-16
      相关资源
      最近更新 更多