如果有列表,则可以直接使用[[
或使用向量对嵌套值进行子集化。
my_list <- list("main" = list(
"a" =
list("aa" = list(
"aaa" = list("aaaa" = 0),
"aaA" = 10
),
"AA" = 20),
"b" = list("bb" = list(), "BB" = list(10))
))
my_list1 <- my_list
my_list1[["main"]][["a"]][["aa"]][["aaa"]][["aaaa"]] <- 145
my_list1[[c("main", "a", "aa", "aaa", "aaaa")]] <- 2222
现在我们关闭了[[
和[[<-.my_class
重载的容器:
dcon <- function(){
data <- list()
return(structure(function(named_list = NULL){
force(named_list)
if(!is.null(named_list)){
for (na in names(named_list)){
data[[na]] <<- named_list[[na]]
}
return(NULL)
} else {
return(data)
}
},
class = "my_class"))
}
`[[.my_class` <- function(dcon, name){
return(.subset2(dcon(), name))
}
`[[<-.my_class` <- function(dcon, name, value){
input <- list()
input[[name]] <- value
dcon(input)
return(dcon)
}
my_list2 <- dcon()
my_list2(my_list)
my_list2[["main"]][["a"]][["aa"]][["aaa"]][["aaaa"]] <- 2222
修改后的列表似乎相同。
identical(my_list2(), my_list1) # TRUE
my_list2[["main"]][["b"]][["bb"]][["bbb"]] <- list(878)
identical(my_list2()[["main"]][["a"]], my_list1[["main"]][["a"]]) # TRUE
问题-这部分怎么可能:
data[[na]] <<- named_list[[na]]
有效,而类似的事情(据我所知,相当于上面的意思):
my_list1[["main"]] <- list("a" = list("aa" = list("aaa" = list("aaaa" = 2222))))
有什么不同吗? my_list1[["main"]]
的行为是我所期望的。
为什么它在重载零件中表现不同?