Я пытаюсь открыть и прочитать несколько файлов NetCDF и хочу сохранить результат в одном списке из множества фреймов данных. в моем рабочем каталоге у меня есть папка "main_folder", содержащая пять папок (x1, x2, x3, x4 и x5), каждая папка из этих пяти содержит различное количество подпапок, скажем, например, папка x1 содержит подпапки изпапка "y1", "y20". папка y1 содержит n1 количество файлов NetCDF. папка y2 содержит n2 количество файлов NetCDF и так далее. аналогично для других папок х2, х3, х4, х5. Из папки x1 я хочу открыть, прочитать и получить переменные из всех файлов NetCDF и сделать их одним кадром данных df1. и из папки x2 я хочу сделать второй фрейм данных df2 и так далее. В конце у меня будет пять фреймов данных, соответствующих содержимому каждой папки. и затем я хочу составить список из этих пяти фреймов данных.
Я написал один код, он работает, за исключением одной проблемы: второй фрейм данных в списке содержит данные df1, к ним добавлены данныевторой файл df2. и df5 содержит данные df1 + df2 + df3 + df4 + df5. Как я могу решить эту проблему. вот мой код
setwd("E:/main_folder")
#1# list all files in the main_folder
folders<- as.list(list.files("E:/main_folder"))
#2# make list of subfiles
subfiles<- lapply(folders, function(x) as.list(list.files(paste("E:/main_folder",x, sep="/"))))
#3# list the netcdf files from each subfiles
files1<- lapply(subfiles[[1]], function(x) list.files(paste( folders[1],x, sep = "/"),pattern='*.nc',full.names=TRUE))
files2<- lapply(subfiles[[2]], function(x) list.files(paste( folders[2],x, sep = "/"),pattern='*.nc',full.names=TRUE))
files3<- lapply(subfiles[[3]], function(x) list.files(paste( folders[3],x, sep = "/"),pattern='*.nc',full.names=TRUE))
files4<- lapply(subfiles[[4]], function(x) list.files(paste( folders[4],x, sep = "/"),pattern='*.nc',full.names=TRUE))
files5<- lapply(subfiles[[5]], function(x) list.files(paste( folders[5],x, sep = "/"),pattern='*.nc',full.names=TRUE))
#4# join all files in one list
filelist<- list(files1,files2,files3,files4,files5)
#5# Read the NetCDF and get the desired variables
df<- data.frame()
MissionsData<- list()
for (i in seq_along(filelist)){
n<- length(filelist[[i]])
for (j in 1:n){
for( m in 1:length( filelist[[i]][[j]])){
nc<- nc_open(filelist[[i]][[j]][[m]])
lat<- ncvar_get(nc, "glat.00")
lon<- ncvar_get(nc, "glon.00")
ssh<- ncvar_get(nc, "ssh.53")
jdn<- ncvar_get(nc, "jday.00")
df<- rbind(df,data.frame(lat,lon,ssh,jdn))
nc_close(nc)
}
}
MissionsData[[i]]<- df
}
Кроме того, можно ли выполнить шаг # 3 # за один раз вместо того, чтобы вводить их вручную?