分享

R学习 流程控制 if,else,ifelse

 公号生信小课堂 2021-10-28

R学习往期回顾:

R学习 从Tidyverse学起,入门R语言(tidyr和stringr)

R学习 从Tidyverse学起,入门R语言(tibble,readr和dplyr)

R学习:字符串

R学习:环境和函数

R学习:数据框的基本操作

R学习:R for Data Science(五)

R学习:R for Data Science(四)

R学习:R for Data Science(三)

R学习:R for Data Science(二)

R学习:R for Data Science(一)

流程控制

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 <- 3if(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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多