向量
冒号运算符 创建一个从某个数到另一个数的数字序列
c函数 拼接数值和向量
vector
函数 创建一个指定类型和长度的矢量 其内容可以为空
vector("numeric", 5)
## [1] 0 0 0 0 0
vector("complex", 5)
vector("logical", 5)
vector("chracter", 5)
vector("list", 5)
numeric(5)
## [1] 0 0 0 0 0
complex(5)
logical(5)
character(5)
# 不过list函数的工作方式有所区别
NULL是一个特殊的空值,不能与NA混淆
seq
函数 创建序列
seq.int
和冒号运算符相同 但可指定步长
seq_len
创建从1到输入值的序列,输入值为0时很有用
seq_along
创建从1开始、长度为输入值的序列
seq.int(3, 12)
## [1] 3 4 5 6 7 8 9 10 11 12
seq.int(3, 12, 2)
## [1] 3 5 7 9 11
n <- 0
1:n
## [1] 1 0
seq_len(0)
## integer(0)
pp <- c("peter", "piper", "picked", "a", "peck")
for(i in seq_along(pp) print(pp[i]))
## [1] "peter"
## [1] "piper"
## [1] "picked"
## [1] "a"
## [1] "peck"
所有向量都有一个长度,以表明向量包含多少个元素
缺失值也会被计入长度
length
函数
字符向量,长度为字符串的数目
nchar
函数 计算字符串中字符数目
sn <- c("peter", "john", "joey")
length(sn)
## [1] 3
nchar(sn)
## [1] 5 4 4
可以为向量重新分配一个长度,不过很少这么做
如果向量的长度缩短,那么后面的值会被删除,如果长度增加,则缺失值会追加到末尾
name = value
在创建向量时为其指定名称
names
函数指定名称或获取名称
c(apple=1, banana=2, "kiwi fruit"=3, 4)
## apple banana kiwi fruit
## 1 2 3 4
x <- 1:4
names(x) <- c("apple", "banana", "kiwi fruit", "")
索引 只访问向量中的部分或个别元素 用方括号实现
有多种索引方法
- 传入正数,从1开始索引(不是0)
- 传入负数,不显示某些位置
- 传入名称
x <- (1:5)^2
## [1] 1 4 9 16 25
x[c(1, 3, 5)]
x[c(-2, -4)]
x[c(T, F, T, F, T)]
names(x) <- c("one", "four", "nine", "sixteen", "twenty five")
x[c("one", "nine", "twenty five")]
不能混合使用正负数!!!
缺失索引所对应的值也是缺失值,正数和逻辑值可以使用NA索引,但是负数不可以使用NA索引
x[c(1, NA, 5)]
## one <NA> twenty five
## 1 NA 25
超出范围的下标值会返回NA
非整数下表默认向0舍入
不传递任何下标值将返回整个向量
which
函数返回逻辑向量中为T的位置
which.min
which(min(x))
which.max
which(max(x))
which(x > 10)
## sixteen twentyfive
## 4 5
当对长度不同的向量做运算, 会有怎样的结果?
- 单个数字+向量, 向量中的每个元素都会和这个数字相加
- 两个向量相加, 循环较短向量以配合较长向量
如果长向量长度不是短向量长的倍数,则会出现警告
rep
函数 重复使用元素以创建矢量
rep(1:3, 3)
## [1] 1 2 3 1 2 3 1 2 3
rep(1:3, each = 3)
## [1] 1 1 1 2 2 2 3 3 3
rep(1:3, times = 1:3)
## [1] 1 2 2 3 3 3
rep(1:3, length.out = 5)
## [1] 1 2 3 1 2
rep.int
rep.int(1:3, 3)
## [1] 1 2 3 1 2 3 1 2 3
rep_len
rep_len(1:3, 5)
## [1] 1 2 3 1 2