如何解决根据数据类型,terra::writeRaster 的意外最大可能值
使用 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,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
解决方法
使用开发版本,我现在得到了预期的结果
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,NAflag=0,overwrite=TRUE)
values(x)
#[1,] 65535
#[4,] NaN
4 字节无符号整数
values(r) <- 4294967293:4294967296
x <- writeRaster(r,datatype="INT4U",overwrite=TRUE)
values(x)
# lyr.1
#[1,] 4294967293
#[2,] 4294967294
#[3,] NaN
#[4,] NaN
x <- writeRaster(r,overwrite=TRUE,)
values(x)
# lyr.1
#[1,] 4294967295
#[4,] NaN
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。