这里我创建了一个简单的光栅,只包含整数“1”。
r <- rast(matrix(rep(1, 100), nrow = 10))
此对象没有关联的数据类型:
datatype(r.in.flt)
# ""
我使用datatype = "FLT4S"
将其写入磁盘,然后将其读回。
name.flt <- "test_FLT4S.tif"
writeRaster(r, name.flt, datatype = "FLT4S")
r.in.flt <- rast(name.flt)
我还使用datatype = "INT1U"
将其写入磁盘,然后再将其读回。
name.int <- "test_INT1U.tif"
writeRaster(r, name.int, datatype = "INT1U")
r.in.int <- rast(name.int)
传入的数据包显示正确:
datatype(r.in.flt)
# "FLT4S"
datatype(r.in.int)
# "INT1U"
相应的文件大小显示了整数数据类型的大小的正确减少:
file.size(name.flt)
# 665
file.size(name.int)
# 618
但在内存中,这两个对象似乎具有相同的大小:
object.size(r.in.flt)
# 1304 bytes
object.size(r.in.int)
# 1304 bytes
问题:
1.为什么原始SpatRaster r
没有关联的数据类型?
1.是否可以设置SpatRaster r
的数据类型?我想这样做是为了确保我正在使用的SpatRaster被保存为整数数据类型,以便在处理大型数据集时占用最少的内存。
1.为什么从“INT1U”文件读入的对象在R中不会消耗更少的内存?
1条答案
按热度按时间goqiplq21#
数据类型仅与光栅文件相关。对象本身没有一个。RAM中的栅格值始终为数值(双精度;但是注意像
as.data.frame
和extract
这样的方法返回的类型是在磁盘上的。有关RAM要求,请参见
terra::mem_info
。terra的主要设计原则是,您不必将所有值读入内存。如果有必要,数据会自动以较小的块进行处理。可能有例外,我不知道你的应用程序,所以我不能肯定,但你可能是不必要的复杂化的事情。