内容取自《R语言编程指南》。

[]能够创建一个向量子集,[[]]可以提取向量中的元素。我们可以将一个向量比作10盒糖果,使用[]可以获取其中的3盒糖果,使用[[]]则是打开盒子并从中取出一颗糖果

对于简单的向量,使用[][[]]会产生相同的结果(所以大多数人都没能区分它们)。但在某些情况下,它们会返回不同的结果。例如,对于一个命名的向量,创建一个子集与提取一个元素将会不同:

x <- c(a = 1, b = 2, c = 3)
x["a"]
## a 
## 1

x[["a"]]
## [1] 1

我们利用糖果盒的比喻来进行理解:x["a"]让我们得到标签为“a”的糖果盒,而x[["a"]]让我们得到便签为“a”的糖果盒里面的糖果。

由于[[]]只能用于提取出一个元素,因此不适用提取多个元素的情况

x[[c(1,2)]]

# Error in x[[c(1, 2)]] : 
#   attempt to select more than one element in vectorIndex

此外,[[]]也不能用于负整数,因为负整数的意思是提取除指定位置外的所有元素。

对很多初学者来说,代码中同时使用[][[]]可能会感到混乱,并且容易造成误用。此时,你只要记住糖果盒的比喻即可。