我正在打开一个文件夹中循环播放的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
,但我更喜欢[[
格式。
答案 0 :(得分:0)
您可以使用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的部分。它介绍了嵌套数据帧的概念,该概念使得可以使用许多相似的子数据集和许多子模型。