R语言入门2:数据结构-2

作者: 曹务强 | 来源:发表于2017-11-19 23:43 被阅读31次

    3.矩阵(matrix)

    我们可以把矩阵简单看做向量+维度属性,这个向量一般是整数向量,而维度一般包括两个属性:nrow(行数)和ncol(列数)

    (1)矩阵的创建

    矩阵的创建:方法1

    > x <- matrix(nrow = 3, ncol = 4) # 使用matrix()函数创建一个空矩阵
    > x # 查看矩阵,成功创建一个3行4列的空矩阵
         [,1] [,2] [,3] [,4]
    [1,]   NA   NA   NA   NA
    [2,]   NA   NA   NA   NA
    [3,]   NA   NA   NA   NA
    > x <- matrix(1:12,nrow = 3, ncol = 4) #创建矩阵的同时,给矩阵赋值
    > x # 将1:12的值按列的顺序依次赋值给矩阵
         [,1] [,2] [,3] [,4]
    [1,]    1    4    7   10
    [2,]    2    5    8   11
    [3,]    3    6    9   12
    > dim(x) #使用dim()函数查看矩阵的维度属性(行数和列数)
    [1] 3 4
    > attributes(x) # 使用attributes()函数查看矩阵的所有属性
    $dim # 当前矩阵只有维度的属性(3行4列)
    [1] 3 4
    

    矩阵的创建:方法2

    矩阵是向量加上维度的属性,那么我们也可以通过先创建一个向量,再添加维度的属性,来创建一个矩阵:

    # 先创建一个向量
    > y <- 1:12 # 先创建一个向量
    > dim(y) <- c(3,4) # 给向量添加维度的属性(3行4列)
    > y # 成功创建3行4列的矩阵
         [,1] [,2] [,3] [,4]
    [1,]    1    4    7   10
    [2,]    2    5    8   11
    [3,]    3    6    9   12
    

    (2)拼接矩阵

    > rbind(x,y)  # 使用rbind()函数按行拼接两个矩阵
         [,1] [,2] [,3] [,4]
    [1,]    1    4    7   10
    [2,]    2    5    8   11
    [3,]    3    6    9   12
    [4,]    1    4    7   10
    [5,]    2    5    8   11
    [6,]    3    6    9   12
    > cbind(x,y)  # 使用cbind()函数按列拼接两个矩阵
         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
    [1,]    1    4    7   10    1    4    7   10
    [2,]    2    5    8   11    2    5    8   11
    [3,]    3    6    9   12    3    6    9   12
    

    4.数组(array)

    数组和矩阵比较相似,矩阵的维度为2,但是数组的维度可以大于2。

    数组的创建

    > z <- array(1:24,dim = c(4,6)) #使用array()函数创建数组,并指定数组的内容和维度
    > z # 成功创建一个内容为1:24的4行6列的数组/矩阵
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]    1    5    9   13   17   21
    [2,]    2    6   10   14   18   22
    [3,]    3    7   11   15   19   23
    [4,]    4    8   12   16   20   24
    
    > z1 <- array(1:24,dim = c(2,3,4)) # 创建一个三维的数组
    > z1 # 可以理解为由4个2行3列的矩阵组成
    , , 1 # 第1个2行3列的矩阵
    
         [,1] [,2] [,3]
    [1,]    1    3    5
    [2,]    2    4    6
    
    , , 2 # 第2个2行3列的矩阵
    
         [,1] [,2] [,3]
    [1,]    7    9   11
    [2,]    8   10   12
    
    , , 3 # 第3个2行3列的矩阵
    
         [,1] [,2] [,3]
    [1,]   13   15   17
    [2,]   14   16   18
    
    , , 4 # 第4个2行3列的矩阵
    
         [,1] [,2] [,3]
    [1,]   19   21   23
    [2,]   20   22   24
    

    5.列表(list)

    前面学习过的向量、矩阵和数组可以包含多种元素,但元素的类型必须相同。列表也可以包含多个元素,但是列表中元素的类型可以不同。

    (1)列表的创建

    通过list()函数创建列表,并定义每一个元素(类型可以不同)(类型可以不同)

    # 通过list()函数创建列表,并定义每一个元素(类型可以不同)
    > l <- list("a",2, 10L,3+4i, TRUE) 
    > l # 查看列表中的每一个元素
    [[1]] #第1个元素,字符
    [1] "a"
    
    [[2]] #第2个元素,数值
    [1] 2
    
    [[3]]  #第3个元素,整数
    [1] 10
    
    [[4]] #第4个元素,复数
    [1] 3+4i
    
    [[5]] #第5个元素,逻辑
    [1] TRUE
    # 使用list()函数创建列表的同时,给列表中的元素赋值
    > l1<- list(a = 1, b = "hello,world", c = TRUE)
    > l1 # 查看列表
    $a  #列表中的第1个元素,名字为a,是数值
    [1] 1
    
    $b  #列表中的第2个元素,名字为b,是字符
    [1] "hello,world"
    
    $c  #列表中的第3个元素,名字为c,是逻辑
    [1] TRUE
    

    我们在向量的属性中学到过,可以使用names()函数给向量命名,那么在此处,是否也可以先创建一个列表,再通过names()函数给列表中的每一个元素命名呢?以下代码为试验结果:

    # 先创建列表,但未命名
    > l2 <- list(1,"hello,world",TRUE)
    > l2 #打印列表,为未命名状态
    [[1]]
    [1] 1
    
    [[2]]
    [1] "hello,world"
    
    [[3]]
    [1] TRUE
    
    > names(l2) <- c("a","b","c") #通过names()函数给列表中的元素命名
    > l2 #成功给列表中的元素赋值
    $a
    [1] 1
    
    $b
    [1] "hello,world"
    
    $c
    [1] TRUE
    
    

    当列表中的元素也包含多个元素时,我们可以使用C()函数来把每一个元素的内容连在一起:

    > l3 <- list(c(1,2,3),c("a","b","c","d"))
    > l3
    [[1]]
    [1] 1 2 3
    
    [[2]]
    [1] "a" "b" "c" "d"
    

    (2)使用列表给矩阵命名

    由于矩阵有两个维度,我们可以使用列表来给矩阵中的每一个元素命名:

    # 创建一个3行4列的矩阵
    > l4 <- matrix(1:12, nrow = 3, ncol = 4)
    > l4 #矩阵中的每一个元素没有被命名
         [,1] [,2] [,3] [,4]
    [1,]    1    4    7   10
    [2,]    2    5    8   11
    [3,]    3    6    9   12
    # 使用dimnames()函数将列表中的元素给矩阵命名
    > dimnames(l4) <- list(c("a","b","c"), c("d","e","f","g"))
    > l4  # 成功命名^_^
      d e f  g
    a 1 4 7 10
    b 2 5 8 11
    c 3 6 9 12
    

    注:本文为我在慕课网课程R语言基础的学习笔记,使用Markdown写作。

    相关文章

      网友评论

        本文标题:R语言入门2:数据结构-2

        本文链接:https://www.haomeiwen.com/subject/lulmvxtx.html