簡體   English   中英

我可以在 R 工作區 (RData) 文件中“保存”一個 SpatRaster 嗎?

[英]Can I 'save' a SpatRaster in a R workspace (RData) file?

我注意到,如果我使用 terra package 從存儲在本地硬盤上的文件加載柵格,然后稍后加載工作空間,則 SpatRaster object 沒有任何與之關聯的數據。 有沒有辦法在保存和加載工作區時保留與 SpatRaster object 相關的所有信息?

這是一個示例代碼來說明這個問題:

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`

I am currently importing all the relevant files again after loading the workspace, is there any other way to go about it?

您好 Aniruddha Marathe,歡迎來到 SO!

如果您查看 terra package文檔,您將看到:

[...] 它們無法從已保存的 R session 中恢復,也無法直接傳遞到計算機集群上的節點。 通常,您應該使用 writeRaster 將 SpatRaster 對象保存到磁盤(並將文件名或單元格值傳遞給集群節點)

因此,每次要通過執行terra::rast(system.file("ex/elev.tif", package="terra"))來使用它時,您都必須加載它,而不是通過加載來load()load() function。

希望這可以幫助

您可以先使用writeRaster ,然后再使用rast ,也可以使用saveRDSreadRDS ,但不能使用saveload

就我而言,這是一件好事,因為保存 session 通常不是一個好主意(我希望 R 不會促使您這樣做)。 這很糟糕,因為您不應該從不知從何而來的數據開始分析。 相反,您可以將中間數據保存到文件中,並在下一步中再次讀取它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM