生信技能树学习之数据结构--矩阵、列表
矩阵matrix 二维,只允许一种数据类型
列表。可装万物,没有列与列的区别,
矩阵和列表
矩阵的来源
# 1.由数值型数据框转换
代码语言:javascript复制m1 = as.matrix(iris[,1:4])
# 2.由向量改变维度而来
代码语言:javascript复制m2 = matrix(rnorm(18),nrow = 3)
m2
# 3. 由向量拼接而来
代码语言:javascript复制m3 = cbind(1:10,
11:20,
30:21)
m3
#4.内置
代码语言:javascript复制volcano
一、矩阵新建
代码语言:javascript复制m <- matrix(1:9, nrow = 3)
m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
二、矩阵取子集
代码语言:javascript复制m[2,] [1] 2 5 8
m[,1] [1] 1 2 3
矩阵取子集不支持
三、加列名
代码语言:javascript复制colnames(m) <- c("a","b","c")
m
a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
四、转置
代码语言:javascript复制> t(m) #转置
[,1] [,2] [,3]
a 1 2 3
b 4 5 6
c 7 8 9
代码语言:javascript复制as.data.frame(m)
#转换为数据框,没有赋值,所以输出结果仍是矩阵,只是在控制台看看结果
class(m) [1] "matrix" "array" #array是数组,而矩阵是特殊的数组
m=as.data.frame(m)
m
class(m) [1] "data.frame"
五、矩阵画热图
代码语言:javascript复制pheatmap::pheatmap(m)
pheatmap::pheatmap(m,cluster_cols = F,cluster_rows =F )
六、新建列表和取子集
代码语言:javascript复制l <- list(m1=matrix(1:9, nrow = 3),
m2=matrix(2:9, nrow = 2))
l ##列表里的下一级也叫元素,m1,m2只是列表l中的元素名字,m1和m2都是矩阵。
$m1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
$m2
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 3 5 7 9
代码语言:javascript复制####不输入m1 和m2时,输出的就是[[1]] [[2]]
l <- list(matrix(1:9, nrow = 3),
matrix(2:9, nrow = 2))
[[1]]
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
[[2]]
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 3 5 7 9
代码语言:javascript复制###两个中括号是取出一个矩阵
l[[2]] ###取出第二个矩阵,
l$m1 ###取出m1子集
列表的下一级也是元素,列表的元素可以包罗万象,什么数据结构都可以
### 补充:元素的名字
代码语言:javascript复制scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")
scores
jimmy nicker Damon Sophie tony
100 59 73 95 45
代码语言:javascript复制scores["jimmy"] ##取子集
jimmy
100
代码语言:javascript复制scores[c("jimmy","nicker")] ##取子集
jimmy nicker
100 59
代码语言:javascript复制names(scores)[scores>60] ##取出分数大于60的人的名字。
[1] "jimmy" "Damon" "Sophie"
# 删除变量 只能删除变量用,不能删除一个数据框的第几行或者第几列
代码语言:javascript复制rm(l) ##删除一个
rm(df1,df2) ##删除多个
rm(list = ls()) ###**删除全部
快捷键ctrl l ###清空控制台
#练习3-2 load("matchtest.Rdata")
#1.统计iris最后一列有哪几个取值,每个取值重复了多少次
代码语言:javascript复制iris[,ncol(iris)]
table(iris[,ncol(iris)])
table(iris$Species)
#2.提取iris的前5行,前4列,并转换为矩阵,赋值给a。
代码语言:javascript复制a <- as.matrix(iris[1:5,1:4])
a
#3.将a的行名改为flower1,flower2...flower5。
代码语言:javascript复制rownames(a) <- paste0("flower",1:nrow(a))
a
#4.探索列表取子集l[2]和l[[2]]的区别(提示:数据结构)
代码语言:javascript复制class(l[2]) #### [1] “list”
class(l[[2]]) #### [1] “matrix”“array”
七、数据框调整列的顺序
代码语言:javascript复制a = read.csv("exercise.csv")
a = a[1:3,]
a
a[,c(1,3,2)]