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.") } 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)) 不会有警告 |
|