前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >认识向量

认识向量

作者头像
生信喵实验柴
发布2022-10-25 19:45:40
5200
发布2022-10-25 19:45:40
举报
文章被收录于专栏:生信喵实验柴生信喵实验柴

背景

在使用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 之后,默认已经加载了 datasets 包,里面包含了大量数据集,使用 data()函数可以显示所有数据集。直接敲数据集的名字就能够打印出数据集的内容,内置数据集与自己通过文件将数据读入 R 中,存储为变量效果上是一样的。

代码语言:javascript
复制
# 显示所有内置数据集
data()
#加载扩展包数据集
data(package = "MASS")
data(package = "ggplot2")

四、向量

向量:vector,是 R 中最重要的一个概念,它是构成其他数据结构的基础。向量其实是用于存储数值型、字符型或逻辑型数据的一维数组。R 中的向量与解析几何或者物理学中有数值和方向的量不同,R 中的向量是一个集合,即可以是数值的集合也可以是字符串或者逻辑值的集合。其余数据结构都由向量构成。

4.1 创建向量

用函数c来创建向量。c代表concatenate连接,也可以理解为收集collect,或者合并combine。新手经常犯的错误就是忘了使用 c()函数。

代码语言:javascript
复制
#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)
# user  system elapsed 
# 0       0       0
system.time(for (i in x) {x <- x+1})
# user  system 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 向量索引

代码语言:javascript
复制
#数值索引
rivers[c(1)]
rivers[c(1,10,100)] #R索引从1开始,其他语言一般从0开始
rivers[1:10]
rivers[c(1,2,2,2,2)]
rivers[c(-1)]#去掉第一个值
rivers[c(-1:-10)]
#名称索引
euro
names(euro)
euro[1:3]
euro['DEM']
#逻辑值索引
rivers[TRUE]
rivers[F]
length(rivers)
rivers[seq(1,141,2)]
a <- seq(1,141,2)
rivers[seq(2,141,2)]#rivers[-a]
rivers[c(T,F)]
rivers[c(F,T)]
rivers[c(T,F,F)]
rep(c(T,F),71)[-142]

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

data('rivers')
rivers[rivers > mean(rivers)]
# rivers[which(rivers > mean(rivers))]
a <- which(rivers > mean(rivers))
rivers[rivers > mean(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 创建矩阵

代码语言:javascript
复制
#矩阵
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 矩阵索引

矩阵属于二位数据,需要给定行列的。

代码语言:javascript
复制
#矩阵 索引
nrow(x)
ncol(x)
rownames(x)
colnames(x)
class(x)
x[1,2]
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[c(T,F),c(T,F)]

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)[2]

5.3 利用矩阵绘制热图

利用 pheatmap 绘制热图

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

写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。原地址暂未启用(bioinfoer.com)。

代码语言:javascript
复制
sx.voiceclouds.cn

有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信喵实验柴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档