【发布时间】:2021-09-13 21:17:34
【问题描述】:
使用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
【问题讨论】: