生物信息学生物信息学数据-R语言-图表-决策-Linux-Python

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写作。

上一篇下一篇

猜你喜欢

热点阅读