生信技能树学习之数据结构--矩阵、列表
矩阵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")
ma 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")
scoresjimmy 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)]


