R 将大型光栅堆栈强制转换为数据帧的高效内存方法?
我有一个尺寸为51010685446819358(nrow,ncol,ncell,nlayers)的大型光栅堆栈。目标是将其强制为数据帧,同时保留所有R 将大型光栅堆栈强制转换为数据帧的高效内存方法?,r,time-series,raster,R,Time Series,Raster,我有一个尺寸为51010685446819358(nrow,ncol,ncell,nlayers)的大型光栅堆栈。目标是将其强制为数据帧,同时保留所有NAs。因此,RasterTopints在这里不适用。我尝试了以下操作,但出现错误: rasterOptions(format="CDF",overwrite=TRUE,maxmemory = 1e+09, chunksize=1e+08,progress="text",tmpdir="/data/xxxx") rasterTmpFile("cle
NAs
。因此,RasterTopints
在这里不适用。我尝试了以下操作,但出现错误:
rasterOptions(format="CDF",overwrite=TRUE,maxmemory = 1e+09, chunksize=1e+08,progress="text",tmpdir="/data/xxxx")
rasterTmpFile("clean_this_after_")
#dat is a rasterstack from 1961-2013 at daaily time step
dat_df=extract(dat,1:ncell(dat))
我得到一个错误:
Error: cannot allocate vector of size 39.3 Gb
我的代码是否有问题,或者是否有更好的方法来完成相同的任务
谢谢。这可能会有帮助,这是的,不仅仅是那个,而且你们会在很长的计算时间内看到宇宙的热死亡<当涉及到这些大数据操作时,代码>光栅的速度可能非常慢。但我想用另一个问题来回答你的问题;您确定要使用数据帧吗?即使是这样大小的数据帧也会非常棒。为什么不列个矩阵呢?@SeldomSeenSlim我明白你的意思。问题是我有一些计算要做,但我不知道如何在光栅对象上执行它们。数据帧很容易处理。例如,我想将package
spei
中的spi
函数应用于rasterstack
的每个网格点的时间序列。这很难执行,但很容易应用于数据帧。因此,spi()函数似乎可以处理vector()
、matrix()
、或data.frame()
。这里面可能还有生命,长官。。。所以extract()
在获取值时非常慢。你知道这个函数的内部结构吗?它是只获取堆栈中像素的矢量,还是也查看给定像素周围的邻域?@SeldomSeenSlimspi
只对每个像素的时间序列进行处理。就像数据帧的每一列一样。因此,数据帧中的每一列都是独立处理的。