问题描述
我对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 (将#修改为@)