R语言入门2:数据结构-2
2017-11-19 本文已影响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写作。