3.4.1 通过向量进行索引

Keywords:

Next: ,Previous: Indexing,Up: Indexing

3.4.1 通过向量进行索引

通过向量作为索引,R实现了一些功能非常强大的构造。首先我们将会讨论简单向量的索引。为了简单起见,假定表达式是 x[i]。依据i类型的不同,有下面几种情况。

  • 整数i的所有元素必须是一样的符号。如果它们是正数,x中下标和这些数字一样的元素将会被选中。i 中的元素是负数,那么除这些数字对应的元素外的所有元素被选中。

    如果i是正数,并且大于 length(x),那么对应的所选元素是NAi里面有超过一定范围的负数会导致一个错误。

    一个特别的例子是零索引,它不会有任何影响:x[0]是一个空向量并且其它含有零的正整数或负整数索引有一样的效果因为零索引会被忽略。

  • 其它数值。非整数值在作为索引前会被转换成整数(直接去掉小数部分)。
  • 逻辑值。索引 i通常和x长度一致。如果它比较短,那么它的元素将会被循环使用(见Elementary arithmetic operations)。如果它的长度过长,那么 x 在概念上会被 NA 扩展。从x中选中的元素将是对应位置上iTRUE的元素。

  • 字符i里面的字符串和x 的名字属性进行匹配,其结果整数将会被使用。在精确匹配失败后,[[$都采用局部匹配,因此如果 x没有一个分量的名字为"aa"并且"aabb"是第一个以"aa"作为前缀名字,那么 x$aa 将会匹配 x$aabb。但是,[ 需要精确匹配。字符串""会被特殊处理:它表示`没有名字'和没有元素匹配(甚至是些没有名字的元素)。注意局部匹配仅用于提取信息,在替换操作时不适用。
  • 因子。其结果等价于 x[as.integer(i)]。因子水平不会被采用。如果真的需要,请使用x[as.character(i)] 或者类似的构造。
  • 空索引。表达式 x[] 返回 x,但结果会扔掉“不相关”的属性,仅保留 names属性和多维数组里面的 dimdimnames 属性。
  • NULL。在索引处理时,它似乎就是integer(0)

索引是缺失值 (如 NA)时将返回 NA。该规则同样用于逻辑索引,即,x在使用含NA选择器的索引i时,返回结果中对应索引NA的位置上是NA但是,需要注意的是,NA有不同的模式—字面上的常量是"logical"模式,但它常常自动强制转换成其它类型。这样做的后果是x[NA] 长度和 x一致,而 x[c(1, NA)]的长度为2。因为前者是逻辑索引,而后者是整数索引。

[ 作索引操作同样也对名字属性进行相关的子集操作。

Hits:Loading...

special topic