内容取自《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
此外,[[]]也不能用于负整数,因为负整数的意思是提取除指定位置外的所有元素。
对很多初学者来说,代码中同时使用[]和[[]]可能会感到混乱,并且容易造成误用。此时,你只要记住糖果盒的比喻即可。