[ ]能够创建一个向量子集,[[ ]]可以提取向量中的元素。我们可以将一个向量比作 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

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

x[[-1]]

## Error in x[[-1]]: attempt to select more than one element

至此,我们知道了使用含有不存在的位置或名称来创建向量子集时将会产生缺失值。

但当我们使用[[ ]]提取一个位置超出范围或者对应名称不存在的元素时,该命令将会无法

运行并产生错误信息:

x[["d"]]

## Error in x[["d"]]: 下标出界

对很多初学者来说,代码中同时使用[[ ]]和[ ]可能会感到混乱,并且容易造成误

用。此时,你只需记得糖果盒的比喻即可。