这是说明问题的示例代码:
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`
我目前正在加载工作区后再次导入所有相关文件,还有其他方法吗?
writeRaster
,然后使用
rast
,也可以使用
saveRDS
和
readRDS
,但不能使用
save
和
load
。就我而言,这是一件好事,因为保存会话通常是一个坏主意(我希望 R 不会促使您这样做)。这很糟糕,因为您不应该用无缘无故的数据开始分析。相反,您可以将中间数据保存到文件中,并在下一步中再次读取它们。
如果你查看 terra 包
文档,你会看到这个:
[...] 它们无法从保存的 R 会话中恢复,也无法直接传递到计算机集群上的节点。一般来说,您应该使用 writeRaster 将 SpatRaster 对象保存到磁盘(并将文件名或单元值传递到集群节点)因此,每次您想使用 SpatRaster 时,都必须通过执行
terra::rast(system.file("ex/elev.tif", package="terra"))
来加载它,而不是使用
load()
函数来加载。希望这有帮助😀