0

我正在尝试在项目中使用此文件(MOD13.A2010.unaccum.nc4)中的数据。我已经安装并加载了 ncdf4、raster、ggplot2 和 viridis 库。我使用以下方法成功打开文件:

mcd_file <- nc_open("C:\\Program Files\\RStudio\\R\\MCD13.A2010.unaccum.nc4")

并且可以通过突出显示 mcd_file 并单击 RUN 按钮并使用以下命令访问 mcd_file 的属性:

vars <- names(my_file$var)
print(vars)

这表明 mcd_file 有 5 个变量,time_bnds 是第二个变量,数据集 NDVI 作为第三个变量。

我可以使用以下方法访问有关 time_bns 变量的正确信息:

time.layers < ncvar_get(mcd_file, "time_bnds")

但是当我尝试这个时:

NDVI <- ncvar_get(mcd_file, "NDVI")

我收到一条错误消息,内容如下:

错误:无法分配大小为 49.5 Gb 的向量

我查看了错误消息的含义,这意味着我没有足够的 RAM 来保存 NDVI 中的所有信息,但是我不知道有谁拥有超过 49.5 Gb 的 RAM。然而,人们确实使用 R 分析此文件,因此 NDVI 中的信息应该可以使用 R 以某种方式访问​​。

我知道光栅库中的光栅对象可用于访问太大而无法放入 RAM 的文件中的数据。但是我不知道如何从原始文件中提取 NDVI 中的信息,因此我可以将其写入文件而无需原始文件中的其他信息,这样我就可以使用光栅对象来访问它。这个:

write.csv(my_file$NDVI, file = "NDVI.csv")

创建一个名为 NDVI 的文件,但它是空的。

这个:

write.csv(as.raster(ncvar_get(my_file, "NDVI")),file = "NDVI2010.csv")

生成此错误消息:

错误:无法分配大小为 49.5 Gb 的向量

谁能帮我吗?

4

1 回答 1

2

解决了。

根本不需要通过base R。只要让光栅包做它的魔法。

>f <- "C:\\Program Files\\RStudio\\R\\MCD13.A2010.unaccum.nc4"
>b <- brick(f)  

光栅程序打开指定的文件并访问其中的数据集,但将数据留在磁盘上,在需要时以块的形式取出所需的数据。

绘制栅格图层使用类似的语法:

>x <- desiredBandToPlot
>r <- raster(f, band = x)
>plot(r)

因为每一层都有 28,000,000 像素的数据要绘制,所以我的计算机(使用 AMD A8 CPU)大约需要 5 分钟才能显示(压缩然后)绘图,但它可以工作。

于 2020-03-08T16:21:28.233 回答