首页 > 解决方案 > 从保持列表格式的文件列表中分配变量名称

问题描述

我正在从一个循环遍历它们的文件夹中打开一个 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 文件中,有一个名为 的变量rainassign(allvars[[k]])将简单地分配名称rain。相反,我想要的是变量名称也被分配列表编号,这样它就是rain[[i]]. assign(paste0(allvars[[k]],as.list(i)),ncvar_get...etc)将变量写为rain1rain2但我更喜欢这种[[格式。

标签: rlistassign

解决方案


您可以使用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 for data science 一书,尤其是关于许多模型的部分。它引入了嵌套数据框的概念,可以使用许多相似的子数据集和许多子模型。


推荐阅读