在R中附加到嵌套字典

时间:2014-03-05 09:38:54

标签: r dictionary

我面临的问题是,我似乎无法获得正确形式的字典。我想附加到第一个嵌套列表元素,以便例如我可以:

mylist[[index]] <- list("TSI" <- list(), "type"=mytype)

然后我想在字典TSI中添加元素,以便我有:

mylist[[index]][["TSI"]] <- list(mylist[[index]][["TSI"]], key=value)

但是当我继续这样做时,

mylist[[index]][["TSI"]] <- list(mylist[[index]][["TSI"]], '2'=200)
mylist[[index]][["TSI"]] <- list(mylist[[index]][["TSI"]], '3'=300)

我发现当我这样做时,我没有得到一个列表,而我正在尝试构建的字典/列表只包含一个值。

正如答案所示,我尝试了以下循环:

  # type is some kind of string i.e. "3"
  # myTSI is a value i.e. 400
  # index is a value i.e. 1
  mylist[[index]][["TSI"]] <- c(mylist[[index]][["TSI"]], type=myTSI)

索引在这种情况下不会改变,但是类型确实如此,所以理想情况下应该在mylist[[index]][["TSI"]]中建立一系列条目,其中mylist[[index]][["TSI"]][["6"]]给出该类型的myTSI。但是在退出循环时,我只是在输入时得到:

mylist[[index]][["TSI"]] 

我得到以下

type
"648746" 

但没有字典列表。这很奇怪,因为如果我在循环中执行以下操作:

 mylist[[index]][["TSI"]] <- c(mylist[[index]][["TSI"]], "3"=100)
 mylist[[index]][["TSI"]] <- c(mylist[[index]][["TSI"]], "4"=400)

打印mylist[[index]][["TSI"]]

我得到了

3   4 
100 400 

无法理解为什么会这样。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是这样的结构,其中l的类型为list:

l = c(l, list(key=value))

这将把两个列表合并在一起。

R实现了写时复制范例,因此,逐步将元素附加到列表将是非常低效的。即使我的上述建议也是低效的,因为它遇到了同样的问题。最好的方法是:

tsi = lapply(some_data, some_function_to_populate_list)
mylist[[index]]$TSI = tsi

通过这种方式,您可以避免每次添加元素时复制mylist和嵌套列表