R学习 流程控制 if,else,ifelse
R学习往期回顾:
R学习 从Tidyverse学起,入门R语言(tidyr和stringr)
R学习 从Tidyverse学起,入门R语言(tibble,readr和dplyr)
流程控制
if和else
最简单的流程控制逻辑是使用 if。if 接受一个逻辑值(更准确地说是一个长度为 1 的逻辑向量) 作为参数, 且当该值为 TRUE 时才会执行下一条语句
if(TRUE) message("It was true!")
## It was true!
if(FALSE) message("It wasn't true!")
if 的条件中不允许缺失值, 这样做会抛出一个错误
if(NA) message("Who knows if it was true?")
## Error: missing value where TRUE/FALSE needed
如果你的条件中可能会出现缺失值, 先用 is.na 来测试它
if(is.na(NA)) message("The value is missing!")
## The value is missing!
当然, 大部分时候你都不会直接传入 TRUE 或 FALSE 值, 而是传递一个变量或表达式——因为如果知道该语句将被提前执行, 就不需要 if 语句了。在下例中, runif(1) 将在 0 和 1之间生成一个均匀分布的随机数。如果该值超过 0.5, 则显示以下消息
if(runif(1) > 0.5) message("This message appears with a 50% chance.")
如果你想有条件地执行多个语句, 就把它们括在大括号中
x <- 3
if(x > 2) {
y <- 2 * x
z <- 3 * y
}
与 if 对应的是 else 语句。如果 if 的条件值为 FALSE, 则会执行 else 之后的代码
if(FALSE) {
message("This won't execute...")
} else{
message("but this will.")
} #
# but this will
else 必须与 if 语句的右大括号紧接在同一行。如果你把它挪到下一行, 将出现错误
if(FALSE){
message("This won't execute...")
} else
{
message("and you'll get an error before you reach this.")
}
你可以反复使用 if 和 else 来定义多个条件。请注意, if 和 else 仍然是两个独立的词——还有一个 ifelse 函数, 它稍有不同
ifelse 有三个参数:第一个是逻辑条件向量;第二个参数值在第一个向量为 TRUE 时被返回;第三个参数值在第一个向量为 FALSE 时被返回。
ifelse(test, yes, no)
#test an object which can be coerced to logical mode.
#yes return values for true elements of test.
#no return values for false elements of test.
x <- c(6:-4)
sqrt(x)
会有警告
加上ifelse,取大于0的做运算,
sqrt(ifelse(x >= 0, x, NA))
不会有警告
赞 (0)