学习R记录 <- 基础3

向量、矩阵、数组

向量、矩阵、数组,都是在使用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合并矩阵

使用cbindrbind两个函数可以按或者按来合并矩阵。

> 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》

你可能感兴趣的:(学习R记录 <- 基础3)