其他
R 中的控制结构
赤壁赋
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(1, 0, 10)
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
[1] 1.347491
[1] -0.03158058
[1] 0.5960358
[1] 1.133312
[1] -0.7085361
[1] 1.525453
[1] 1.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:6, 2, 3)
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元入群费用(防止骗子和便于管理)
)。
老俊俊微信:
知识星球:
所以今天你学习了吗?
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
往期回顾
◀..