2

使用 时terra::writeRaster,允许写入的最大可能值取决于数据类型(INT1UINT2SINT2U...)。

该文档告诉“当写入整数值时,最低可用值(给定数据类型)用于[存储NA,我想]用于有符号类型,最高值用于无符号值。”。这应该为无符号类型提供以下范围:

INT1U: 0-254 (2^8-1, 减一用于NA存储)

INT2U: 0-65,534 (2^16-1, 减一用于NA存储)

INT4U: 0-4,294,967,294 (2^32-1, 减一用于NA存储)

但是,对于无符号数据类型INT2UINT4U,我在机器上观察到的最大值不符合这些期望:

INT2U: 65,532 INT4U: 4,294,967,292

为什么会出现这个意想不到的最大值?我问这个问题是因为对于安全的代码编写来说,在编写文件之前准确地知道这些最大值并不是微不足道的。

我在 Windows 10 下工作。这是我用来检查的几行代码:

library(terra)
terra version 1.3.4
Warning message:
package ‘terra’ was built under R version 4.0.5 

r <- rast(ncols=1, nrows=2)
values(r) <- c(65532,65533)

writeRaster(r,"test.tif",wopt=list(datatype="INT2U"))

t <- rast("test.tif")
values(t)
     lyr.1
[1,] 65532
[2,]   NaN
4

1 回答 1

0

有了开发版本,我现在得到了预期的结果

library(terra)
r <- rast(ncols=1, nrows=4)
values(r) <- 65533:65536

2 字节无符号整数

x <- writeRaster(r,"test.tif", datatype="INT2U", overwrite=TRUE)
values(x)
#     lyr.1
#[1,] 65533
#[2,] 65534
#[3,]   NaN
#[4,]   NaN

x <- writeRaster(r,"test.tif", datatype="INT2U", NAflag=0, overwrite=TRUE)
values(x)
#[1,] 65533
#[2,] 65534
#[3,] 65535
#[4,]   NaN

4 字节无符号整数

values(r) <- 4294967293:4294967296
x <- writeRaster(r,"test.tif", datatype="INT4U", overwrite=TRUE)
values(x)
#          lyr.1
#[1,] 4294967293
#[2,] 4294967294
#[3,]        NaN
#[4,]        NaN


x <- writeRaster(r,"test.tif", datatype="INT4U", NAflag=0, overwrite=TRUE,)
values(x)
#          lyr.1
#[1,] 4294967293
#[2,] 4294967294
#[3,] 4294967295
#[4,]        NaN
于 2021-07-02T20:17:45.143 回答