将 saveRDS() 与栅格对象一起使用时出现问题

Issue using saveRDS() with raster objects

我正在尝试使用 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 文件中提取的批处理相同的格式,以便于以后处理。

简短的回答是你可以这样做:

mf <- raster('myfile.asc')
mf <- readAll(mf)
mf

现在,值在内存中并将保存到 .RData 文件

另请注意:

  • 您可以通过 writeRaster 将元数据与数据一起保存(请参阅 ?raster::metadata

  • 您可以通过 raster('myfile2.nc')

  • 访问 ncdf 文件(包含地理数据)
  • 您的 ncdf 文件示例没有提供信息,因为您实际上并未将 nc 用于任何事情。如果您将 mf 替换为 nc,则在您删除 'myfile2.nc'

  • 后,它也将不起作用