生信技能书生信入门班【Day1】-R语言的数据类型和数据结构(向量Vector)

一、数据格式

数据类型:生信分析中常用的数据类型包括三类,如图,“gene”为字符型数据,“logFC”为数值型数据,“positive”为逻辑型数据

  1. 字符型需要加引号"",''目的是和变量做区分,变量不能加引号
  2. 逻辑型:T(TRUE)、F(FALSE),第三种取值是NA(not available)(*代表了一种异常,一般不考虑NA的事儿)

判断数据类型的函数class(),用于判断数据的类型

tips:Tab键可以帮助自动补全


补充一些定义(refer R语言实战第二版)

对象(object):是指可以赋值给变量的任何事物,包括常量、数据结构、函数甚至图形等

因子(factor):是名义型变量(是字符变量吗?不对)或有序变量。名义型变量和有序变量在R中的储存和处理比较特殊


逻辑型数据:比较运算的结果 是 逻辑值: ==,  !=

 逻辑运算符:与&,或| 

【非 !】 可以把TRUE和FALSE相互转换

 x !=  2代表判断 【不等于】:x不等于2吗?

!x>2代表【非 -x大于2】:x大于2的否定

数据类型的判断和转换

二、数据结构

 R中的数据结构包括:向量、矩阵、数组、数据框(dataframe,R中被处理最多的数据结构类型)、列表

2.1 向量 

2.1.1 向量生成

#####2.1.向量生成🌟#####

#(1)用 c() 结合到一起
c(2,5,6,2,9) 
c("a","f","md","b")
#(2)连续的数字用冒号“:” 
1:5
#(3)有重复的用rep(),有规律的序列用seq(),随机数用rnorm()
rep("x",times = 3)  
seq(from = 3,to = 21,by = 3)
rnorm(n = 3)
#(4)通过组合,产生更为复杂的向量。
paste0(rep("x",times = 3),1:3)

2.1.2 对单个向量进行操作

变量命名规则:

R语言简单的计算规则:支持简单的向量运算,不需要for循环遍历(但是复杂的计算还是需要循环)

refer R in Action:

【标量】:是只含一个元素的向量,例如f <- -3,g = "US" 等,用于保存常量。

R函数中参数存在默认值,比如sor(x)的排序就是默认降序,对于这些默认值难以把握就调用帮助文档 如:?sort 就可以查阅帮助文档

#####2.2对单个向量进行的操作####
#(1)赋值给一个变量名
x = c(1,3,5,1) #随意的写法
x
x <- c(1,3,5,1) #规范的赋值符号 Alt+减号
x

#赋值+输出一起实现
x <- c(1,3,5,1);x
(x <- c(1,3,5,1))

#(2)简单数学计算
x+1
log(x)
sqrt(x)

#(3)根据某条件进行判断,生成逻辑型向量
x>3
x==3
#(4)初级统计
max(x) #最大值
min(x) #最小值
mean(x) #均值
median(x) #中位数
var(x) #方差
sd(x) #标准差
sum(x) #总和

length(x) #长度
unique(x) #去重复
duplicated(x) #对应元素是否重复
table(x) #重复值统计
sort(x)
sort(x,decreasing = F)
sort(x,decreasing = T)

2.1.3 对两个向量进行操作

比较运算:返回等长的逻辑向量

数学计算:x+y 对应位置加起来

paste(x,y,sep=''):x和y一一对应连接起来

Paste和Paster0的区别

paster中间默认有个空格,因为函数默认值设置为sep' ' 默认sep有空格,只要写出来sep'',paste和paste0就完全相同了

向量对比:x==y,当两向量不一样长的时候发生循环补齐 

 

循环补齐发生的条件: 等位运算—两个向量之间一对一比较

循环补齐的意义:利用循环补齐简化代码

R语言取两个向量的交、并、差

【重点】%in% :x%in%y :x的每个元素在y中存在吗? 

x==y和x%in%y有什么区别呢?

思考

==是等位运算,y如果有五个值那就会发生【循环补齐】

x%in%y不是等位运算,就算y变成了5个值还是只返回4个值,

#####2.3.对两个向量进行的操作#####
x = c(1,3,5,1)
y = c(3,2,5,6)
#(1)比较运算,生成等长的逻辑向量
x == y 
y == x
#(2)数学计算
x + y
#(3)连接
paste(x,y,sep=",")

#paste与paste0的区别
paste(x,y)

paste0(x,y)
paste(x,y,sep = "")

paste(x,y,sep = ",")
#当两个向量长度不一致
x = c(1,3,5,6,2)
y = c(3,2,5)
x == y # 啊!warning!
#循环补齐--看ppt

#利用循环补齐简化代码
paste0(rep("x",3),1:3)
paste0("x",1:3)

#(4)交集、并集、差集
intersect(x,y)
union(x,y)
setdiff(x,y)
setdiff(y,x)

x %in% y #x的每个元素在y中存在吗
y %in% x #y的每个元素在x中存在吗

2.1.4 向量筛选(取子集)

思考题:如何从一些数中筛选大于7的数?

如何实现将True值留下,False的丢掉?

利用逻辑值取子集:

根据位置取子集: 

定义:下标:R语言向量中存在“下标”,对应位置号,和python一样就是位置的标号,但从1开始

#####2.4.向量筛选(取子集)--看ppt#####

x <- 8:12
#根据逻辑值取子集
x[x == 10]
x[x < 12]
x[x %in% c(9,13)]
#根据位置取子集
x[4]
x[2:4]
x[c(1,5)]
x[-4]
x[-(2:4)]

2.1.5 修改向量中的某个/某些元素:取子集+赋值

R语言中的修改都需要赋值,没有赋值就没有发生过

####2.5.修改向量中的某个/某些元素:取子集+赋值
x
#改一个元素
x[4] <- 40
x
#改多个元素
x[c(1,5)] <- c(80,20)
x

2.1.6 简单向量做图

each和times的区别

rep(c("a","b","c","d"),times=c(1,2,3,5))

输出的结果

所以times有的时候可以模拟each的作用,但是比较复杂

#### 2.6 简单向量作图
k1 = rnorm(12);k1
k2 = rep(c("a","b","c","d"),each = 3);k2
plot(k1)
boxplot(k1~k2) #课后试着搜索boxplot表达什么意思

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值