条件与循环

1.条件语句

1.1if(){ }

(1)只有if没有else,那么条件是FALSE时就什么都不做

i = -1
if (i<0) print('up')
if (i>0) print('up')

如在安包时常见的命令:

if(!require(tidyr)) install.packages('tidyr')
(2)有else
i =1
if (i>0){
  print('+')
} else {
  print("-")
}

(3)ifelse 如果是TRUE,则执行第一个

#ifelse()+str_detect(),王炸
samples = c("tumor1","tumor2","tumor3","normal1","normal2","normal3")
k1 = str_detect(samples,"tumor");k1
ifelse(k1,"tumor","normal")
k2 = str_detect(samples,"normal");k2
ifelse(k2,"normal","tumor")

2.for循环

也可应用于批量装包、批量画图:

#批量装包
pks = c("tidyr","dplyr","stringr")
for(g in pks){
  if(!require(g,character.only = T))
    install.packages(g,ask = F,update = F)
}

#批量画图
par(mfrow = c(2,2))
for(i in 1:4){
  plot(iris[,i],col = iris[,5])
}

3.隐式循环

 apply()族函数

 3.1.apply 处理矩阵或数据框,循环
apply(X, MARGIN, FUN, …) 
#其中X是数据框/矩阵名;
#MARGIN为1表示行,为2表示列,FUN是函数
#apply(X, 2, FUN, …)对x中每一列干什么 

3.2.lapply
### 2.lapply(list, FUN, …) 
# 对列表/向量中的每个元素实施相同的操作

lapply(1:4,rnorm)

练习:

#练习7-2----
# 1.加载deg.Rdata,根据a、b两列的值,按照以下条件生成向量x:
#a< -1 且b<0.05,则x对应的值为down;
#a>1 且b<0.05,则x对应的值为up;
#其他情况,x对应的值为no
# 统计up、down、no各出现了多少次

load('deg.Rdata')
x=ifelse(deg$a>1&(deg$b)<0.05,"up",ifelse(deg$a< -1&(deg$b)<0.05,"down","no"))
table(x)

引用生信技能树

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值