前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生信技能树 Day2 R语言入门

生信技能树 Day2 R语言入门

原创
作者头像
用户11064093
发布2024-04-12 13:13:15
2360
发布2024-04-12 13:13:15

作业讲解

  1. seq() 函数
代码语言:r
复制
# 1.生成1到15之间所有偶数
seq(from = 2,to = 15,by = 2)
代码语言:r
复制
## [1]  2  4  6  8 10 12 14
代码语言:r
复制
##参数可以省略
seq(2,15,2)
代码语言:r
复制
## [1]  2  4  6  8 10 12 14
  1. paste0()函数
代码语言:r
复制
# 2.生成向量,内容为:"student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14" 
paste0(rep("student",times = 7),seq(from = 2, to = 15,by = 2))
代码语言:r
复制
## [1] "student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14"
代码语言:r
复制
paste0(rep("student",times = 3),seq(from = 2, to = 15,by = 2))
代码语言:r
复制
## [1] "student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14"
代码语言:r
复制
paste0(rep("student",times = 7),seq(from = 2, to = 6,by = 2))
代码语言:r
复制
## [1] "student2" "student4" "student6" "student2" "student4" "student6" "student2"

若拼贴的两个向量元素数目不相等,则循环补齐(见下文)循环补齐是R语言中的重要原则

  1. 数据类型转换优先顺序
代码语言:r
复制
# 3.将两种不同类型的数据用c()组合在一起,看输出结果
c(1,"a")
代码语言:r
复制
## [1] "1" "a"
代码语言:r
复制
c(TRUE,"a")
代码语言:r
复制
## [1] "TRUE" "a"
代码语言:r
复制
c(1,TRUE)
代码语言:r
复制
## [1] 1 1

字符型>数值型>逻辑型

##今日内容

对单个向量操作

  1. 赋值 <-
代码语言:r
复制
x <- c(1,3,5,1) #规范的赋值符号 快捷键Alt+减号
x
代码语言:r
复制
## [1] 1 3 5 1
代码语言:r
复制
#赋值+输出一起实现
x <- c(1,3,5,1);x
代码语言:r
复制
## [1] 1 3 5 1
代码语言:r
复制
(x <- c(1,3,5,1))
代码语言:r
复制
## [1] 1 3 5 1

分号;可将多行代码放一行

注意变量命名规范

  1. 批量数学运算
代码语言:r
复制
x <- c(1,3,5,1)
x+1
代码语言:r
复制
## [1] 2 4 6 2
代码语言:r
复制
log(x)
代码语言:r
复制
## [1] 0.000000 1.098612 1.609438 0.000000
代码语言:r
复制
sqrt(x)
代码语言:r
复制
## [1] 1.000000 1.732051 2.236068 1.000000
  1. 根据某条件进行判断,生成逻辑型向量
代码语言:r
复制
x>3
代码语言:r
复制
## [1] FALSE FALSE  TRUE FALSE
代码语言:r
复制
x==3
代码语言:r
复制
## [1] FALSE  TRUE FALSE FALSE
  1. 初级统计
代码语言:r
复制
max(x) #最大值
代码语言:r
复制
## [1] 5
代码语言:r
复制
min(x) #最小值
代码语言:r
复制
## [1] 1
代码语言:r
复制
mean(x) #均值
代码语言:r
复制
## [1] 2.5
代码语言:r
复制
median(x) #中位数
代码语言:r
复制
## [1] 2
代码语言:r
复制
var(x) #方差
代码语言:r
复制
## [1] 3.666667
代码语言:r
复制
sd(x) #标准差
代码语言:r
复制
## [1] 1.914854
代码语言:r
复制
sum(x) #总和
代码语言:r
复制
## [1] 10
代码语言:r
复制
length(x) #长度 元素个数
代码语言:r
复制
## [1] 4
代码语言:r
复制
unique(x) #去重复 从左往右第二次及以上出现的元素为重复元素
代码语言:r
复制
## [1] 1 3 5
代码语言:r
复制
duplicated(x) #对应元素是否重复 返回逻辑值向量
代码语言:r
复制
## [1] FALSE FALSE FALSE  TRUE
代码语言:r
复制
!duplicated(x) # 第一次出现是TRUE 重复是FALSE
代码语言:r
复制
## [1]  TRUE  TRUE  TRUE FALSE
代码语言:r
复制
table(x) #重复值统计
代码语言:r
复制
## x
## 1 3 5 
## 2 1 1
代码语言:r
复制
sort(x) # 默认升序
代码语言:r
复制
## [1] 1 1 3 5
代码语言:r
复制
sort(x,decreasing = F)
代码语言:r
复制
## [1] 1 1 3 5
代码语言:r
复制
sort(x,decreasing = T)
代码语言:r
复制
## [1] 5 3 1 1

作业2优化 前面student个数是数出来的,但是在R语言中,能用函数代替就不要自己数,除非这代码只用一次

代码语言:r
复制
a <- seq(2,15,2)
paste0(rep("student",times = length(a)),a)
代码语言:r
复制
## [1] "student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14"

对两个向量操作

代码语言:r
复制
x = c(1,3,5,1)
y = c(3,2,5,6)
  1. 等位运算
代码语言:r
复制
#(1)比较运算,生成等长的逻辑向量
x == y 
代码语言:r
复制
## [1] FALSE FALSE  TRUE FALSE
代码语言:r
复制
y == x
代码语言:r
复制
## [1] FALSE FALSE  TRUE FALSE
代码语言:r
复制
#(2)数学计算
x + y
代码语言:r
复制
## [1]  4  5 10  7
代码语言:r
复制
#(3)连接

2.连接paste0和paste

代码语言:r
复制
paste(x,y,sep=",")
代码语言:r
复制
## [1] "1,3" "3,2" "5,5" "1,6"
代码语言:r
复制
#paste与paste0的区别:都是将元素转化为字符串后拼接,paste可以通过sep定义连接符号,默认为空格,也可以无缝连接。paste0没有sep参数,默认无缝连接,可以看成特殊的paste
paste(x,y)
代码语言:r
复制
## [1] "1 3" "3 2" "5 5" "1 6"
代码语言:r
复制
paste0(x,y)
代码语言:r
复制
## [1] "13" "32" "55" "16"
代码语言:r
复制
paste(x,y,sep = "")
代码语言:r
复制
## [1] "13" "32" "55" "16"
代码语言:r
复制
paste(x,y,sep = ",")
代码语言:r
复制
## [1] "1,3" "3,2" "5,5" "1,6"
  1. 循环补齐 短的向量元素一一对应补齐,输出向量长度与长向量一致
代码语言:r
复制
#当两个向量长度不一致
x = c(1,3,5,6,2)
y = c(3,2,5)
x + y
代码语言:r
复制
## Warning in x + y: 长的对象长度不是短的对象长度的整倍数
代码语言:r
复制
## [1]  4  5 10  9  4
代码语言:r
复制
x == y # 啊!warning!
代码语言:r
复制
## Warning in x == y: 长的对象长度不是短的对象长度的整倍数
代码语言:r
复制
## [1] FALSE FALSE  TRUE FALSE  TRUE

因此作业2可以继续优化

代码语言:r
复制
paste0("student",seq(2,15,2))
代码语言:r
复制
## [1] "student2"  "student4"  "student6"  "student8"  "student10" "student12" "student14"
  1. 交集、并集、差集
代码语言:r
复制
#(4)交集、并集、差集 注意会去重
intersect(x,y)# 交集
代码语言:r
复制
## [1] 3 5 2
代码语言:r
复制
union(x,y) # 并集
代码语言:r
复制
## [1] 1 3 5 6 2
代码语言:r
复制
setdiff(x,y) # x里的哪些元素y里没有
代码语言:r
复制
## [1] 1 6
代码语言:r
复制
setdiff(y,x) # y里的哪些元素x里没有
代码语言:r
复制
## numeric(0)
代码语言:r
复制
# %in% 返回逻辑值向量,与前面向量个数一致,不会去重,注意与intersect的区别
# 与==的区别是元素是否一一对应比较
x %in% y #x的每个元素在y中存在吗
代码语言:r
复制
## [1] FALSE  TRUE  TRUE FALSE  TRUE
代码语言:r
复制
y %in% x #y的每个元素在x中存在吗
代码语言:r
复制
## [1] TRUE TRUE TRUE

向量筛选(取子集)[]

  1. 根据逻辑值取子集 []里面是与被筛选向量长度相同的逻辑值向量
代码语言:r
复制
x <- 8:12
#根据逻辑值取子集
x[x == 10]
代码语言:r
复制
## [1] 10
代码语言:r
复制
x[x < 12]
代码语言:r
复制
## [1]  8  9 10 11
代码语言:r
复制
x[x %in% c(9,13)]
代码语言:r
复制
## [1] 9
  1. 根据位置取子集 []里面是下标向量
代码语言:r
复制
#根据位置取子集
x[4]
代码语言:r
复制
## [1] 11
代码语言:r
复制
x[2:4]
代码语言:r
复制
## [1]  9 10 11
代码语言:r
复制
x[c(1,5)]
代码语言:r
复制
## [1]  8 12
代码语言:r
复制
x[-4] # 这里负号是排除,不是倒数的意思!!!与python是不一样的!!!
代码语言:r
复制
## [1]  8  9 10 12
代码语言:r
复制
x[-(2:4)]
代码语言:r
复制
## [1]  8 12
代码语言:r
复制
# 也可以给元素命名后根据名字取子集,后面会讲

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

代码语言:r
复制
x
代码语言:r
复制
## [1]  8  9 10 11 12
代码语言:r
复制
#改一个元素
x[4] <- 40
x
代码语言:r
复制
## [1]  8  9 10 40 12
代码语言:r
复制
#改多个元素
x[c(1,5)] <- c(80,20)
x
代码语言:r
复制
## [1] 80  9 10 40 20
代码语言:r
复制
# 注意一定要赋值,不然白改

简单向量作图

代码语言:r
复制
k1 = rnorm(12);k1
代码语言:r
复制
##  [1] -0.5911213  0.1683967  0.5130066 -0.8738898 -0.8950050  0.6982776  0.7872991  0.2893432
##  [9]  1.5340035 -0.4590547  0.1422255  0.5780768
代码语言:r
复制
k2 = rep(c("a","b","c","d"),each = 3);k2
代码语言:r
复制
##  [1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d"
代码语言:r
复制
## rep加不加each重复模式不同哦
plot(k1)
代码语言:r
复制
boxplot(k1~k2) #boxplot画箱线图

小问题:下面代码那个正确?

代码语言:r
复制
tmp = sort(log_rank_p[log_rank_p<0.05])
代码语言:r
复制
tmp = sort(log_rank_p)[log_rank_p<0.05]

上面是对的。表面上看是括号位置的问题,实际上是运算顺序和筛选条件是否匹配被筛选向量的问题。下面代码中,中括号内得到的逻辑值向量是根据log_rank_p的元素顺序来的,但是它作为筛选条件筛选的是sort后的log_rank_p,顺序已经变了,所以得到的结果是错的。

引用自生信技能树

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作业讲解
    • 对单个向量操作
      • 对两个向量操作
        • 向量筛选(取子集)[]
          • 修改向量中的某个/某些元素:取子集+赋值
            • 简单向量作图
              • 小问题:下面代码那个正确?
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档