生信喵 发表于 2022-8-10 12:54:33

认识向量

本帖最后由 生信喵 于 2022-8-22 15:54 编辑

背景
       在使用R语言过程中,每一步中都需要关注R语言的数据结构。数据结构是R语言中最重要的内容,也是最难的一部分,学会了这部分之后,R语言就不难了。很多时候,函数无法运行,都是因为数据结构的问题。在学习R语言数据结构之前需要首先了解下数据的类型。
一、数据类型
       数据类型主要表示数据代表哪种内容,是字符串还是数值,逻辑值,或者时间日期等。数值可以用于计算,字符串不能用来计算,逻辑值用来判断等。
      
       Excel 中数据类型
       数值类型

类型 说明
字符(charactor) 常常被引号包围
数值(numeric) 实数向量
复数(complex) 复数向量
逻辑(logical) 二元逻辑向量(T=TRUE, F=FALSE)


二、常用数据结构
       R的数据结构主要包括以下几种,每一种都有固定的用处,学习R语言需要非常熟悉每一种数据结构的特点。

       R 中常用数据结构

数据结构 说明 允许多种类型
1 向量(vector) 最基本的类型 否
2 因子(factor) 表示类别/分类数据 否
3 数组(array) 带下标的多维数据集合 否
4 矩阵(matrix) 二维数组 否
5 数据框(data frame) 行和列组成的表,每列可以是不同数据类型 是
6 列表(list) 不同对象的有序集合 是
7 时间序列 根据时间顺序排列的数据 是
8 类 不同数据组合 是
       R 中常用数据结构

三、内置数据集
       R 语言的一个好处是内置了大量数据集,一般 R 扩展包也包含数据集,这样无需自己准备输入文件,可以很方便的重复案例的内容。启动 R 之后,默认已经加载了 datasets 包,里面包含了大量数据集,使用 data()函数可以显示所有数据集。直接敲数据集的名字就能够打印出数据集的内容,内置数据集与自己通过文件将数据读入 R 中,存储为变量效果上是一样的。
# 显示所有内置数据集
data()
#加载扩展包数据集
data(package = "MASS")
data(package = "ggplot2")
四、向量
       向量:vector,是 R 中最重要的一个概念,它是构成其他数据结构的基础。向量其实是用于存储数值型、字符型或逻辑型数据的一维数组。R 中的向量与解析几何或者物理学中有数值和方向的量不同,R 中的向量是一个集合,即可以是数值的集合也可以是字符串或者逻辑值的集合。其余数据结构都由向量构成。
4.1 创建向量
       用函数c来创建向量。c代表concatenate连接,也可以理解为收集collect,或者合并combine。新手经常犯的错误就是忘了使用 c()函数。
#R 内置向量
rivers
euro
plot(rivers)
hist(rivers)
names(euro)
length(euro)
a <- c(1,2,3)
#字符型向量
b <- c("red","green","blue")
#生成连续型向量
c <- seq(1,100,2)
d <- rep(c(1,2),5)
seq(1,100,2)
seq(from = 1,to = 100,by = 3)
seq(from = 1,to = 100,length.out = 20)
?seq
seq(from = 1,to = 100,length.out = 19)
rep(1,2)
rep(c(1,2),3)
rep(1:4,2)
rep(1:4,each = 2)
rep(1:4,times = 2)
rep(1:4,times = 1:4)
rep(1:10,times = 1:10)

class(a)
typeof(a)
is.vector(a)
y <- mtcars
is.vector(y)
methods(is)

c <- c('TRUE','FALSE')
is.logical(c)
c <- c(TRUE,FALSE)
c <- c(T,F,F)

x <- c(1,2,3,4,'red') #有一个字符,默认其他数字也是字符
x
typeof(x)
# 向量化操作
a
a*2
paste(b,a,sep = "-")

x <- 1:10
x+1
x*2
x*c(2,-2)
x+c(1,2,3)
1:9+c(1,2,3)
x <- runif(10000)
x+1
for (i in x) {x <- x+1;print(x)}
system.time(x+1)
# usersystem elapsed
# 0       0       0
system.time(for (i in x) {x <- x+1})
# usersystem elapsed
# 0.208   0.000   0.208运算时间明显延长

a <- 1:10
b <- 1:5
a+b
b+a
a*b
b*a

a <- 1:50
b <- c('A','B')
rep(b,each=50)
paste(a,rep(b,each=50),sep = '')

4.2 向量索引
#数值索引
rivers
rivers #R索引从1开始,其他语言一般从0开始
rivers
rivers
rivers#去掉第一个值
rivers
#名称索引
euro
names(euro)
euro
euro['DEM']
#逻辑值索引
rivers
rivers
length(rivers)
rivers
a <- seq(1,141,2)
rivers#rivers[-a]
rivers
rivers
rivers
rep(c(T,F),71)[-142]

mean(rivers)
rivers
rivers
rivers <- 1000 #修改数据
rivers <- 1
data('rivers')#恢复数据
rivers <- 'A'
rivers#变成字符型了
class(rivers)
data('rivers')
rivers <- 0
rivers <- 1
table(rivers)

data('rivers')
rivers
# rivers
a <- which(rivers > mean(rivers))
rivers <- 1
rivers
rivers[-a] <- 0
rivers

getwd()
x <- read.csv("homo_length.csv")
x <- head(x,24)
len <- x[,2]
len
class(len)
length(len)
mean(len)
sum(len)
min(len)
max(len)
median(len)
chr <- x[,1]
barplot(len,names.arg = chr,las = 2,col = c('red','green'))
barplot(len,names.arg = chr,las = 2,col = rainbow(4),border = F)
rainbow(4)
五、矩阵
       矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。向量是一维的,而矩阵是二维的,需要有行和列。矩阵是 R 语言中使用较多的一种数据结构,矩阵分为数值矩阵和字符串矩阵,常用的是数据矩阵,基因的表达数据为数值矩阵。矩阵有两大作用,一个是用来计算相关性,另外可以用来绘制热图。
5.1 创建矩阵#矩阵
getwd()
setwd('/home/xhs/jyxy/11-rbasic/')
state.x77
x <- 1:100
m <- matrix(x,nrow = 25,ncol = 4)
m <- matrix(x,nrow = 25,ncol = 4,byrow = T) #默认是按列排
m
letters
matrix(letters,nrow = 13,byrow = T)
dim(m)
dir()
x <- read.csv('heatmap.csv',row.names = 1)
head(x)
heatmap(x)
# Error in heatmap(x) : 'x' must be a numeric matrix
rowSums(state.x77)
colMeans(state.x77)
cor(state.x77)
class(x)
x <- as.matrix(x)
library(pheatmap)
pheatmap(x)
heatmap(x)
5.2 矩阵索引
       矩阵属于二位数据,需要给定行列的。

#矩阵 索引
nrow(x)
ncol(x)
rownames(x)
colnames(x)
class(x)
x
x[,2]
class(x[,2])
x[,c(1:5)]
x['ENSG0029','N.GD1']

colnames(x)
y <- x[,c(1:5,11:15,6:10,16:20)]
colnames(y)
y

rowSums(x)
rowMeans(x)
colSums(x)
colMeans(x)

x
apply(x, 1, sum)
apply(x, 2, sum)
apply(x, 1, mean)

apply(x, 1, var)
apply(x, 1, sd)
apply(x, 1, max)
apply(x, 1, min)

?apply
View(state.x77)
sum(state.x77[,1])
apply(state.x77, 2, mean)

5.3 利用矩阵绘制热图
      
       利用 pheatmap 绘制热图
       R 非常擅长绘制热图,基础包中的 heatmap()可以直接绘制热图,gplots 包 heatmap.2()也可以绘制热图,pheatmap 包 pheatmap()函数可以绘制更加优雅的热图,ComplexHeatmap包可以绘制复杂的热图。


页: [1]
查看完整版本: 认识向量