使用 时terra::writeRaster
,允许写入的最大可能值取决于数据类型(INT1U
、INT2S
、INT2U
...)。
该文档告诉“当写入整数值时,最低可用值(给定数据类型)用于[存储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
存储)
但是,对于无符号数据类型INT2U
和INT4U
,我在机器上观察到的最大值不符合这些期望:
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