Next: , Previous: Elementary arithmetic operations, Up: Evaluation of expressions



3.4 索引

R 有多种构造允许通过索引操作来访问单个元素或者子集。 在基本的向量类型中,可以通过x[i]访问第i个元素,但在 列表,矩阵和多维数组中也有索引。 除了用单个的整数进行索引,还有多种形式的索引。索引既可用于提取对象的一部分, 也可用于替换对象的一部分(或者增加一部分)。

R 有三种基本的索引操作。语法如下面的例子所示

     x[i]
     x[i, j]
     x[[i]]
     x[[i, j]]
     x$a
     x$"a"

对于向量和矩阵,[[形式很少使用,尽管它和[在语义上稍稍 有点不同(例如它去掉了所有namesdimnames属性,并且 在字符索引的时候采用局部匹配)。当用单个索引处理多维结构时, x[[i]] 或者 x[i] 将会返回x的第 i 个元素。

对于一个列表,通常使用 [[ 去选择任意单个的元素, 而 [ 返回所选元素的列表。

[[ 形式允许使用整数或字符索引选出单个的元素,而 [ 允许通过向量进行索引。 注意,对于一个列表,索引可以使用向量然后向量的任何一个元素将依次用于列表, 所选的分量,所选分量的分量,等等。1 返回结果仍然是单个元素。

$形式用于列表和成对列表的递归对象。 它仅仅允许字面上的字符串和符号作为索引。 也就是说,这种索引不可计算的:当你需要通过对一个表达式求值确定一个索引, 请使用 x[[expr]]。当 $用于非递归对象时,返回结果是NULL


Footnotes

[1] 译者注:我测试了一下,和这里描述的不一样。 原文为:“Note though that for a list, the index can be a vector and each element of the vector is applied in turn to the list, the selected component, the selected component of that component, and so on.”