尝试在我的netcdf数据集的列表中创建列表

问题描述

我对R非常陌生,目前正在为我的项目处理大量的NARR netcdf文件。 最初,我尝试合并所有这些文件,以便仅处理一个文件,但尝试使用一个文件将它们从3d转换为2d阵列,占用了将近64gb的ram。 由于我的ram的限制,建议我遍历多个netcdf文件(200mb),而不要从合并的文件(33gb)中提取信息。

我的目标是为特定的坐标集提取变量(例如,对流可用势能(CAPE))。我已经使用了rgdal库中的over()函数,并成功检索了索引。 下面是提取每个shapefile索引并将其保存到列表(all_ind)中的代码

can_coor <- #csv file with NARR coordinates
coordinates(can_coor) <-~ Lon + Lat # to make them into spatial points

get_ind <- function(x){
  x <- readOGR(x) 
  
  proj4string(can_coor) <- proj4string(x) #to have consistent projection
  
  tor_ind <- over(x,can_coor)
  
}

files <- list.files(filepath,pattern = ".shp$",full.names = T,all.files = F)

all_ind <- lapply(files,get_ind)

接下来,我尝试在netcdf文件上应用每组lon和lat索引all_ind [[i]],以从所有时间戳中提取该特定坐标的值,并将其保存在新列表中。

由于我对ram有限制,因此我计划创建一个循环以读取每个netcdf文件,然后提取这些索引的所有值并将它们保存到单独的列表中。因此,最后,我的列表将具有[[1:30]](用于30个netcdf文件),在该[[1:30]]中,我将具有[[1:239]](用于239组索引)我正在提取)。

我想出了以下for循环,但是我不确定如何解决它以获得所需的结果。

var_list <- list()
for(i in 1:length(all_ind)){
  fileL <- list.files("netcdf file path",pattern = ".nc$",all.files = F)
  n <- nc_open(fileL)
  for (j in 1:length(n)) {
    data <- ncvar_get(n,"cape")
    data <- matrix(data,dim(data)[3],dim(data)[1]*dim(data)[2]) #time as rows for easier filtration
    subset_data <- data[,all_ind[[i]]]
    var_list[[i]] <- subset_data
  }
 all_var_list[[i]] <- var_list
}

任何建议将不胜感激。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)