我尝试使用saveRDS()
来保存大量列表,每个列表都包含栅格图层和包含元数据的列表。当从ncdf文件中提取栅格图层时,它工作正常,但是当原始文件是ascii文件时,saveRDS()
仅写入指向原始文件的指针,而不是将值写入结束文件。
这是“正在发生的事情的精简版本”:
require(raster)
mf <- raster('myfile.asc')
meta <- list(mylonglistofmetadata)
res <- list(mf, meta)
saveRDS(res, 'myresult.Rdata')
myresult.Rdata
现在只是一个指向myfile.asc
的33KB指针,当我真的希望它存储这些值以便在我擦除myfile.asc
后它仍然可以工作(所以它应该是关于15MB)
相反,对于ncdf格式的其他文件:
require(ncdf4)
require(raster)
ff <- 'myfile2.nc'
nc <- nc_open(ff)
meta <- list(mylonglistofmetadata)
res <- list(nc, meta)
saveRDS(res, 'myresult2.Rdata')
在这里,myresult2.Rdata
正在存储我想要的所有内容,所以我的猜测是光栅包出现了问题?
任何人都知道如何解决这个问题?我不想使用writeRaster()
,因为我试图将元数据与数据保持在一起,并使用与从ncdf文件中提取的批处理相同的格式,以方便以后的处理。
答案 0 :(得分:4)
简短的回答是你能做到:
mf <- raster('myfile.asc')
mf <- readAll(mf)
mf
现在,这些值在内存中并将保存到.RData文件
另请注意:
您可以通过writeRaster使用数据保存元数据(请参阅?raster :: metadata
您可以通过raster('myfile2.nc')
您的ncdf文件示例不提供信息,因为您实际上并未使用nc
。如果您将mf
替换为nc
,则在删除'myfile2.nc'