如何在R中创建和访问list ..的列表?

时间:2018-07-20 21:45:14

标签: r list

我有一个特殊的要求,即我事先不知道需要多少级分支。我需要将数据结构作为一个列表,因为我也不知道每个分支中将存储多少个元素。

现在,我很难将分支编码为1,2,3,4或5。我最初以为我永远不需要超过3个层次的层次结构。尽管现在不是这种情况。我已经降至5级了;每次只需更新下面的代码即可。

  # list of lists of lists of ...
  # i.e. declaring the data structure that holds the indices for each portfolio!
  l = vector("list", num_ports[1]);
  if(length(num_ports) > 1) {   for(i in 1:num_ports[1]) {

    l[[i]] = vector("list", num_ports[2]);

    if(length(num_ports) > 2) {   for(j in 1:num_ports[2]) {

      l[[i]][[j]] = vector("list", num_ports[3]);

      if(length(num_ports) > 3) {   for(k in 1:num_ports[3]) {

        l[[i]][[j]][[k]] = vector("list", num_ports[4]);

        if(length(num_ports) > 4) {   for(k in 1:num_ports[4]) {

          l[[i]][[j]][[k]][[p]] = vector("list", num_ports[5]);

          # more than 4 levels not allowed as of now!
          # index the list by: l[[i]][[j]][[k]][[p]][[q]] where q in 1:num_ports[5]

        }
        }
      }
      }
    }
    }
  }
  }

我知道要在其上创建层次结构的数组num_ports

注意: :我稍后会更新并访问此列表。那里的代码更加混乱。我可能永远都不需要超过5个级别,但是当前的方法远非优雅。

2 个答案:

答案 0 :(得分:3)

这可以简化很多。 l[[i]][[j]][[k]][[p]]l[[c(i,j,k,p)]]是同一件事。您可以通过构造向量的任何方式来构造索引向量,而无需事先知道会持续多长时间。

答案 1 :(得分:1)

这是构建“空”嵌套列表的方法:

mainCtrl.mainGrid.isRowSelectable

Reduce(function(x, y) replicate(y, x, F), rev(num_ports), NULL) 提供解决方案和我的回报:

num_ports <- c(2, 3)

它也适用于更复杂的情况。