我可以将 SpatRaster “保存”在 R 工作区 (RData) 文件中吗?

问题描述 投票:0回答:2
我注意到,如果我使用 terra 包从存储在本地硬盘上的文件加载栅格,然后稍后加载工作区,则 SpatRaster 对象没有任何与其关联的数据。有没有办法在保存和加载工作空间时保留与 SpatRaster 对象关联的所有信息?

这是说明问题的示例代码:

library(terra) f <- system.file("ex/elev.tif", package="terra") r <- rast(f) #This produces the following output r #class : SpatRaster #dimensions : 90, 95, 1 (nrow, ncol, nlyr) #resolution : 0.008333333, 0.008333333 (x, y) #extent : 5.741667, 6.533333, 49.44167, 50.19167 (xmin, xmax, ymin, #ymax) #coord. ref. : lon/lat WGS 84 (EPSG:4326) #source : elev.tif #name : elevation #min value : 141 #max value : 547 sources(r)#this works save.image("delete_if_found.RData") rm(list = ls()) load("delete_if_found.RData") r #which returns the spatraster as #class : SpatRaster #Error in .External(list(name = "CppMethod__invoke_notvoid", address = \<pointer: (nil)\>, : #NULL value passed as symbol address`
我目前正在加载工作区后再次导入所有相关文件,还有其他方法吗?

r gis terra
2个回答
6
投票
您可以使用

writeRaster

,然后使用 
rast
,也可以使用 
saveRDS
readRDS
,但不能使用 
save
load

就我而言,这是一件好事,因为保存会话通常是一个坏主意(我希望 R 不会促使您这样做)。这很糟糕,因为您不应该用无缘无故的数据开始分析。相反,您可以将中间数据保存到文件中,并在下一步中再次读取它们。


4
投票
您好 Aniruddha Marathe,欢迎来到 SO!

如果你查看 terra 包

文档,你会看到这个:

[...] 它们无法从保存的 R 会话中恢复,也无法直接传递到计算机集群上的节点。一般来说,您应该使用 writeRaster 将 SpatRaster 对象保存到磁盘(并将文件名或单元值传递到集群节点)

因此,每次您想使用 SpatRaster 时,都必须通过执行

terra::rast(system.file("ex/elev.tif", package="terra"))

 来加载它,而不是使用 
load()
 函数来加载。

希望这有帮助😀

© www.soinside.com 2019 - 2024. All rights reserved.