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

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)

相关推荐

  • JavaScript基础-03

    JavaScript基础-03

  • 一文讲解Python条件语句的使用方法

    Python条件语句是由执行一条或多条语句的结果(True或False)来决定要执行的代码块.Python程序语言指定true和非空(null)值均为true,0或null为false. Python ...

  • If(flag) 与 if(!flag)

    BooleanisMan = true / false ; If(isMan)等价于if(isMan==true) If(!isMan)等价于if(!isMan==true) 因为只要是 if() 语 ...

  • java 流程控制学习

    用户交互Scanner import java.util.Scanner; public class Demo01 { public static void main(String[] args) { ...

  • Java流程控制与Scanner类的使用

    Java流程控制与Scanner类的使用 Scanner类 Scanner类可以使程序接受键盘输入,实现人机交互 一个完整的Scanner的使用例子: //创建一个扫描器对象,用于接收键盘数据 Sca ...

  • 深度学习在控制领域的四类应用

    深度学习在控制领域的研究已初见端倪,目前的研究主要集中在: 控制目标识别 状态特征提取 系统参数辨识 控制策略计算 这里从控制系统的角度分类,介绍深度学习在控制领域的研究现状. 1.控制目标识别 在传 ...

  • 【流程小故事】从包饺子中学习流程本质分析

    如果把包饺子看做一次流程之旅,那如何衡量这个流程设计的质量呢? 很多人会说,这还不简单,又快又好呗.但怎么个快?怎么个好?很多人容易做一些浅层次思考,结果想法和行动之间有一个太平洋. 而且,很多人一说 ...

  • 第4天:Python 流程控制

    在编程的世界中,流程控制是程序员运行的基础,流程控制决定了程序按照什么样的方式去执行,本节给大家介绍 Python 流程控制相关语法. if 语句 if 语句表示如何发生什么样的条件,执行什么样的逻辑 ...

  • 专家详细解读,高血压九大认识误区,对照学习,控制血压不反弹

    专家详细解读,高血压九大认识误区,对照学习,控制血压不反弹

  • java流程控制的一些说明和分析

    Scanner工具类(流程控制的基础) 在当前阶段,java中,可以进行人机交互的一个前提就是Scanner工具. 语法: Scanner scanner = new Scanner(System.i ...

  • 学习 | 如何控制细纱锭间质量差异

    细纱锭间质量差异,俗称锭差,主要指细纱机上各锭位之间的质量差异.如条干差异.重量差异.捻度差异.强力差异等.锭间差异是客观存在的,虽不能消除,但可以积极采取措施减小到最小限度.影响细纱锭间质量差异的因 ...

  • 「实用」40-100,最难处理的尴尬距离,快来学习怎样控制!

    很多球友都能够轻轻松松将球打出100码以外,学习了短杆在线系列课程后,40码以内的短杆击球也不在话下.但是,在千变万化的球场状况中,难免遇到短杆不足而全挥杆又过头的尴尬距离. 今天,高提士高尔夫技术导 ...