我面临的问题是,我似乎无法获得正确形式的字典。我想附加到第一个嵌套列表元素,以便例如我可以:
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
无法理解为什么会这样。
答案 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
和嵌套列表