向量、矩阵、数组
向量、矩阵、数组,都是在使用R中常用到的
1.1向量
使用c函数可以拼接数值和向量
c(1, 1:3, c(5, 8), 13)#不同值被拼接成单一向量
[1] 1 1 2 3 5 8 13
除此之外用vector函数可以创建一个指定类型和长度的矢量。这个矢量的值可以是0,FALSE,空的字符串,等等。
> vector('numeric', 5)
[1] 0 0 0 0 0
> vector('complex', 5)
[1] 0+0i 0+0i 0+0i 0+0i 0+0i
> vector('logical', 5)
[1] FALSE FALSE FALSE FALSE FALSE
> vector('character', 5)
[1] "" "" "" "" ""
需要注意的是“空值”并不是NA值,空值表示为NULL。
同样使用下面的命令与上面命令等价:
> numeric(5)
[1] 0 0 0 0 0
> complex(5)
[1] 0+0i 0+0i 0+0i 0+0i 0+0i
> logical(5)
[1] FALSE FALSE FALSE FALSE FALSE
> character(5)
[1] "" "" "" "" ""
1.2序列
除了冒号来创建序列之外,还有几个更加简单快速的函数来创建序列。
1.2.1
seq.int函数可以创建一个序列。序列的范围有两个数指定,原理与冒号相同。
> seq.int(3,12)
[1] 3 4 5 6 7 8 9 10 11 12
而seq.int函数比冒号方便的地方在于,它可以指定步长,
> seq.int(3,12, 2)
[1] 3 5 7 9 11
1.2.2
seq_len函数
这个函数会创建一个从1开始到指定输入值的序列,虽然有时候不如直接用冒号方便但是当输入值为0时:
> 1:0
[1] 1 0
> seq_len(0)
integer(0)
1.2.3
seq_along函数
此函数会创建一个从1开始,长度为输入值的序列
> pp <- c('peter', 'piper', 'picked', 'a', 'peck', 'of', 'pickled', 'peppers')
> for (i in seq_along(pp)) {
+ print(pp[i])
}
[1] "peter"
[1] "piper"
[1] "picked"
[1] "a"
[1] "peck"
[1] "of"
[1] "pickled"
[1] "peppers"
1.2.4 长度
每一个向量都有长度,是一个非负整数(可以为零),可以通过length函数查询,NA也会被计入长度。
值得一提的是字符串长度,函数length得到的是字符串的数目,而每个字符串中字符的长度用函数nchar可以得到。
> sn <- c('a', 'dsad', 'dsajdsadsadas', 'fgigdfsa')
> length(sn)
[1] 4
> nchar(sn)
[1] 1 4 13 8
1.2.5 命名
R中的命名有点像python中的字典,即name=value来表示
> x <- c(apple = 1, banbana = 2, "kiwi fruit" = 3, 4)
> x
apple banbana kiwi fruit
1 2 3 4
当然也可以在创建向量之后对其赋值。
> x <- 1:4
> names(x) <- c('apple', 'banana', "kiwi fruit")
> x
apple banana kiwi fruit
1 2 3 4
name函数可以用来取的向量的名称。
1.3矩阵与数组
1.3.1 创建矩阵和数组
使用array函数可以创建数组,它需要传入两个向量(维度和值)来作为参数。另外,可以为每个维度命名。
test <- array(
1:24,
dim = c(4, 3, 2),
dimnames = list(
c('one', 'two', 'three', 'four'),
c('ein', 'zwei', 'drei'),
c('un', 'deux')
)
)
> test
, , un
ein zwei drei
one 1 5 9
two 2 6 10
three 3 7 11
four 4 8 12
, , deux
ein zwei drei
one 13 17 21
two 14 18 22
three 15 19 23
four 16 20 24
创建矩阵类似于创建数组,其实矩阵就是一维的数组。
> test<- matrix(
+ 1:24,
+ nrow = 4, ncol = 3,
+ dimnames = list(
+ c('one', 'two', 'three', 'four'),
+ c('ein', 'zwei', 'drei')
+ )
+ )
> test
ein zwei drei
one 1 5 9
two 2 6 10
three 3 7 11
four 4 8 12
1.3.2行、列、维度
对于矩阵和数组,dim函数会返回其维度的整数值向量。
> dim(test)
[1] 4 3 2
> dim(test)
[1] 4 3
1.3.3合并矩阵
使用cbind和rbind两个函数可以按行或者按列来合并矩阵。
> test1 <- matrix(seq.int(2, 24, 2), nrow = 4)
> test2 <- test
> cbind(test1, test2)
ein zwei drei
one 2 10 18 1 5 9
two 4 12 20 2 6 10
three 6 14 22 3 7 11
four 8 16 24 4 8 12
> rbind(test1, test2)
ein zwei drei
2 10 18
4 12 20
6 14 22
8 16 24
one 1 5 9
two 2 6 10
three 3 7 11
four 4 8 12
代码皆来自或参考《学习R》