【问题标题】:accessing large dataset from NetCDF4 file using R使用 R 从 NetCDF4 文件访问大型数据集
【发布时间】:2020-03-06 18:21:52
【问题描述】:

我正在尝试在项目中使用此文件 (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 的向量

谁能帮帮我?

【问题讨论】:

    标签: r r-raster ncdf4


    【解决方案1】:

    解决了。

    根本不需要经过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 分钟才能(压缩然后)显示该图,但它可以工作。

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 2019-09-26
      • 2019-02-21
      • 2018-12-17
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      相关资源
      最近更新 更多