R的数据类型与相应运算
(学习资料参考北京大学李东风老师《R语言教程》)
7 R向量下标和子集
在R中下标与子集是极为强大的功能, 需要一些练习才能熟练掌握, 许多其它语言中需要多个语句才能完成的工作在R中都可以简单地通过下标和子集来完成。
7.1 正整数下标
对向量x, 在后面加方括号和下标可以访问向量的元素和子集。
设 x <- c(1, 4, 6.25)
。 x[2]
取出第二个元素; x[2] <- 99
修改第二个元素。 x[c(1,3)]
取出第1、3号元素; x[c(1,3)] <- c(11, 13)
修改第1、3号元素。 下标可重复。 例如:
- 取出第二个元素:
x <- c(1, 4, 6.25)
x[2]
输出结果如下:
- 修改第2个元素:
x[2] <- 99; x
输出结果如下:
将原来x为c(1, 4, 6.25) 改成了 c(1, 99, 6.25)
- 取出1、3个元素:
x[c(1,3)]
输出结果如下:
7.2 负整数下标
负下标表示扣除相应的元素后的子集,如:
- 扣除第2个元素后的子集:
x <- c(1,4,6.25)
x[-2]
输出结果如下:
- 扣除1、3个元素后的子集:
x[-c(1,3)]
输出结果如下:
注意: 负整数下标不能与正整数下标同时用来从某一向量中取子集, 比如,x[c(1,-2)]没有意义。
7.3 空下标与零下标
x[]
表示取x
的全部元素作为子集。 这与x
本身不同,比如:
x <- c(1,4,6.25)
x[] <- 999
x
输出结果如下(将x的全部元素都替换成999):
x[0]
是一种少见的做法, 结果返回类型相同、长度为零的向量, 如numeric(0)
。 相当于空集。当0与正整数下标一起使用时会被忽略。 当0与负整数下标一起使用时也会被忽略。
7.4 下标超界
设向量 x 长度为 n , 则使用正整数下标时下标应在 {1,2,3,…,n} 中取值,如果使用大于 n 的下标, 读取时返回缺失值,并不出错。 给超出的下标元素赋值, 则向量自动变长, 中间没有赋值的元素为缺失值。 例如:
x <- c(1,4,6.25)
x[5]
输出结果如下:
再比如:
x <- c(1,4,6.25)
x[5] <- 9
x
输出结果如下(由于原来的 x 只有3个值,所以第4个值为NA,第5个取新值9):
虽然R的语法对下标超界不视作错误, 但是这样的做法往往来自不良的程序思路, 而且对程序效率有影响, 所以实际编程中应避免下标超界。
7.5 逻辑下标
下标可以是与向量等长的逻辑表达式, 一般是关于本向量或者与本向量等长的其它向量的比较结果,如:
- 取出x的大于3的元素组成的子集
x <- c(1,