【发布时间】:2016-04-21 18:22:36
【问题描述】:
理解下面mylist[2]和mylist[[2]]区别的基本逻辑或哲学基础是什么?
理解单方括号与双方括号的简单逻辑方法是什么?
> mylist <- list(1, list("a","b","c"))
> mylist[2]
# [[1]]
# [[1]][[1]]
# [1] "a"
# [[1]][[2]]
# [1] "b"
# [[1]][[3]]
# [1] "c"
> mylist[[2]]
# [[1]]
# [1] "a"
# [[2]]
# [1] "b"
# [[3]]
# [1] "c"
【问题讨论】:
-
mylist[2]是 mylist 的子列表。它将是一个列表,其中包含与“[”的数字或字符参数中的元素一样多的元素。mylist[[2]]是mylist[2]的内容。 "[[" 函数只需要返回一个元素,尽管在这种情况下它是一个包含多个元素的列表。它可以是另一个列表(如本例所示),也可以是矩阵或无维度原子向量。 -
mylist[2]返回一个包含一个元素的列表(在您的示例中是一个列表)。所以你最终得到一个包含三个character向量的列表。mylist[[2]]取mylist的第二个元素,这是三个character向量的列表。试试length(mylist[2])和length(mylist[[2]])。另见str(mylist[2])和str(mylist[[2]])的输出。 -
我听到的一个类比是将列表想象成一列火车。火车上的每节车厢都载着东西。如果你去掉两节车厢,你的火车就少了两节车厢。如果你把除了一辆车以外的所有东西都移走,它仍然是一列火车。这相当于
[]。要查看某辆车里装了什么东西,你必须打开车门,相当于[[]]。 -
@lmo ...有时当您打开火车车厢的门时,里面坐着一整列火车! :)
-
到现在为止的好话。一个后果是你可以做
..[i:j](给你列表的一部分作为列表)但你不能做..[[i:j]](因为每个“汽车”的内容可能与其他“汽车”的内容非常不同) .