我正在从循环它们的文件夹中打开netcdf文件列表,这样:
nfiles <- 10
datL <- list.files(/home/myname/filedir/,pattern='*nc')
for (i in 1:nfiles){
dat = nc_open(datL[[i]])
要提取变量并将其名称保存在我执行的netcdf文件中:
allvars <- as.list(names(dat[['var']]))
for (k in 1:length(unlist(allvars)) ) {
assign(allvars[[k]],ncvar_get(dat(allvars[[k]])) } }
所有文件各有约50个变量,但大多数文件具有相同的变量名。我想做的只是无法解决,是如何将列表号保留在变量的命名中。因此,举个例子,假设在netcdf文件中有一个名为rain
的变量,assign(allvars[[k]])
只会指定名称rain
。我想要的是为变量名称分配列表编号,使其为rain[[i]]
。 assign(paste0(allvars[[k]],as.list(i)),ncvar_get...etc)
将变量写为rain1
,rain2
,但我更喜欢[[
格式。
您可以使用list2env()将命名变量列表分配给全局环境,例如:
l <- list(a = 1, b = 2:4, p = pi, ff = gl(3, 4, labels = LETTERS[1:3]))
list2env(l, .GlobalEnv)
ls()
[1] "a" "b" "ff" "l" "p"
您也可以查看数据科学的R书,特别是关于many models的部分。它引入了嵌套数据框的概念,可以处理许多类似的子数据集和许多子模型。