查看原文
其他

R 中的控制结构

JunJunLab 老俊俊的生信笔记 2023-06-15



赤壁赋

1前言

  • 寄蜉蝣于天地, 渺沧海之一粟。
  • 哀吾生之须臾, 羡长江之无穷。

2引言

介绍一下 R 语言里的基本控制结构,材料来自 Mastering Software Development in R

3if 语句

R 语言里的 if 语句条件需要括号包围,而执行内容则需要花括号包围:

if(<condition>) {
        ## do something
}
## Continue with rest of code

不满足条件的则可以给 else 进行其它处理:

if(<condition>) {
        ## do something
else {
        ## do something else
}

如果有多个条件则可以使用 else if:

if(<condition1>) {
        ## do something
else if(<condition2>)  {
        ## do something different
else {
        ## do something different
}

判断数字是否大于 3,然后进行赋值:

## Generate a uniform random number
x <- runif(1010)
if(x > 3) {
        y <- 10
else {
        y <- 0
}

else 语句可有可无,当 if 条件为真时:

if(<condition1>) {

}

if(<condition2>) {

}

4for 语句

for 语句可以循环对多个向量,列表等等进行处理:

numbers <- rnorm(10)
for(i in 1:10) {
        print(numbers[i])
}
[1] -0.9567815
[11.347491
[1] -0.03158058
[10.5960358
[11.133312
[1] -0.7085361
[11.525453
[11.114152
[1] -0.1214943
[1] -0.2898258

seq_along()函数用于生成与传入的参数长度相同的序列。我们可以使用这个代替:

x <- c("a""b""c""d")

## Generate a sequence based on length of 'x'
for(i in seq_along(x)) {
        print(x[i])
}
[1"a"
[1"b"
[1"c"
[1"d"

也可以不使用索引取值:

for(letter in x) {
        print(letter)
}
[1"a"
[1"b"
[1"c"
[1"d"

短的语句可以不换行:

for(i in 1:4) print(x[i])
[1"a"
[1"b"
[1"c"
[1"d"

可以对循环进行嵌套:

x <- matrix(1:623)

for(i in seq_len(nrow(x))) {
        for(j in seq_len(ncol(x))) {
                print(x[i, j])
        }
}

next 关键字可以用来跳过满足条件的循环:

for(i in 1:100) {
        if(i <= 20) {
                ## Skip the first 20 iterations
                next
        }
        ## Do something here
}

break 则用来强制跳出本层循环,不执行后面的语句:

for(i in 1:100) {
      print(i)

      if(i > 20) {
              ## Stop loop after 20 iterations
              break
      }
}

5总结

在实际工作中,我们会经常组合不同的语句来完成目的,此外 for 语句用于大量的循环中效率比较低,我们可以使用*pply家族,purrr,lplyr等包高效处理循环。





  老俊俊生信交流群 (微信交流群需收取20元入群费用(防止骗子和便于管理))



老俊俊微信:


知识星球:



今天的分享就到这里了,敬请期待下一篇!

最后欢迎大家分享转发,您的点赞是对我的鼓励肯定

如果觉得对您帮助很大,赏杯快乐水喝喝吧!




  





ggpolar 绘制极坐标图形

transPlotR 优雅的绘制基因转录本结构

ggarchery 添加个性化箭头

scRNAtoolVis 0.0.3 版本更新

customize 你的 GSEA 图

GseaVis 优雅的可视化 GSEA 富集结果

GSEA 图是如何画出来的? (源码解析)

clusterProfiler 的可视化大全

clusterProfiler 做 GSEA 富集分析

深度神经网络学习对单细胞数据进行清洗去噪

◀..

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存