使用 switch 对值进行分支
与处理 TRUE 和 FALSE 条件的 if 相比,switch 语句则是用来处理数字或者字符串,
并根据输入返回某个分支。
假设输入一个整数 n,switch 返回从第 1 个参数开始的第 n 个参数值:
switch(1, "x", "y")
## [1] "x"
switch(2, "x", "y")
## [1] "y"
如果输入的整数超出范围,无法匹配任何给定参数的话,就不会明确返回某个可见值
(实际上,不可见的 NULL 会被返回):
switch(3, "x", "y")
当输入字符串时,switch( ) 语句会有不同的处理方式。它会将参数名称与输入进
行匹配,并返回最先匹配的参数的值(如果匹配多个参数,则返回第 1 个参数对应的值):
switch("a", a = 1, b = 2)
## [1] 1
switch("b", a = 1, b = 2)
## [1] 2
对于第 1 个 switch 语句,a=1 匹配变量 a,对于第 2 个,b=2 匹配变量 b。如果没
有参数与输入匹配的话,不可见的 NULL 将被返回:
switch("c", a = 1, b = 2)
为了考虑所有可能情况,我们可以增加最后一个参数(没有参数名)来捕获所有其他输入:
switch("c", a = 1, b = 2, 3)
## [1] 3
与 ifelse( ) 语句相比较,switch( ) 语句更像 if( ) 语句。它们只接受单值输
入(字符串的数目)却可以返回任何值:
switch_test <- function(x) {
switch(x,
a = c(1, 2, 3),
b = list(x = 0, y = 1),
c = {
cat("You choose c!\n")
list(name = "c", value = "something")
})
}
switch_ _test("a")
## [1] 1 2 3
switch_ _test("b")
## $x
## [1] 0
##
## $y
## [1] 1
switch_ _test("c")
## You choose c!
## $name
## [1] "c"
##
## $value
## [1] "something"
总而言之,if、ifelse( ) 和 switch( ) 的性质略有不同,具体使用哪个,视情况而定。
使用 switch 对值进行分支的更多相关文章
- c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...
- switch多值匹配骚操作,带你涨姿势!
我们都知道 switch 用来走流程分支,大多情况下用来匹配单个值,如下面的例子所示: /** * @from 微信公众号:Java技术栈 * @author 栈长 */ private static ...
- T——SQL基础语句(定义变量,赋值,取值,分支,循环,存储过程)
T--SQL基础语句 1.定义变量: declare @变量名 数据类型 ; declare @a int ; declare @b nvarchar(10) ; 2.赋值: 法1:set @变量名 ...
- 使用jQuery获取Bootstrap Switch的值
$('#switcher').bootstrapSwitch('state'); // true || false $('#switcher').bootstrapSwitch('toggleStat ...
- JAVA中if多分支和switch的优劣性。
Switch多分支语句switch语句是多分支选择语句.常用来根据表达式的值选择要执行的语句.例如,在某程序中,要求将输入的或是获取的用0-6代表的星期,转换为用中文表示的星期.该需求通过伪代码描述的 ...
- 浅谈Java中switch分支语句
前言: 在程序中遇到多分支选择的时候,想必大家都喜欢用if...else if...else...语句,尤其是初学者,因为在了解switch语句之前,我也是只会用if...else语句.那么现在看完这 ...
- 窥探Swift编程之强大的Switch
之前初识Swift中的Switch语句时,真的是让人眼前一亮,Swift中Switch语句有好多特有而且特好用的功能.说到Switch, 只要是写过程序的小伙伴对Switch并不陌生.其在程序中的出镜 ...
- PHP流程控制结构之分支结构
流程控制对于任何一门编程语言来说都是具有通用与普遍性的,是程序的重要组成部分.可以这么说,在任何一门程序设计语言中,都需要支持三种基本结构:顺序结构.分支结构(选择结构或条件结构)和循环结构.对于顺序 ...
- swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念
***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil ...
随机推荐
- php 自带的过滤函数和转义函数
函数名 释义 介绍 htmlspecialchars 将与.单双引号.大于和小于号化成HTML格式 &转成&"转成"' 转成'<转成<>转成> ...
- [ASP.NET 大牛之路]03 - C#高级知识点概要(2) - 线程和并发
目录: 1.线程简单使用 2.并发和异步的区别 3.并发控制—锁 4.线程的通信机制 5.线程池中的线程 6.案例:支持并发的异步日志组件 7.结束 1.线程的简单使用---------------- ...
- EasyUI +MVC +EF实现增删改查
OA项目的框架已经搭建好了,接下来就是在这个框架下完成相应的业务的编码,接下来实现UserInfo页面的增删改查. 1.首先先谈一下遇到的一个框架上的问题:提示EF版本不一致之类的问题,主要是解决方案 ...
- Oracle在linux下命令行无法使用退格键退格,无法使用上下键切换历史命令的解决办法
使用xshell等客户端登录oracl时在命令行无法使用退格键也无法使用上下键切换历史命令可以使用rlwrap解决 1,linux环境 2,下载rlwrap wget http://files.cnb ...
- Oracle管理监控之使用utl_mail自动邮件报警配置
--代发邮件存储过程源码如下: CREATE OR REPLACE PROCEDURE send_mail(p_recipient VARCHAR2, -- 邮件接收人 ...
- spring boot tomcat 线程数 修改初始线程数 统计性能 每百次请求耗时
[root@f java]# tail -30 nohup.outsearchES-TimeMillisSpent:448P->1602@fT->http-nio-8080-exec-3t ...
- 【Python项目篇】【爬妹子图】
#-*- coding:utf-8 -*- import urllib import urllib2 from bs4 import beautifulsoup4 #获取标签下的内容 #打开网页,获取 ...
- 【Javascript】Windows下Node.js与npm的安装与配置
1:先下载Node.js,网站https://nodejs.org/en/,左侧为稳定版,右侧为最新版,推荐稳定版 2:Node.js安装,运行下载后的.msi文件,一路下一步就可以了,我选择的安 ...
- 201-React顶级API
一.概述 React是React库的入口点.如果您从<script>标记加载React,则这些顶级API可在React全局中使用.如果你使用npm的ES6,你可以写:import Reac ...
- 数据挖掘-聚类分析(Python实现K-Means算法)
概念: 聚类分析(cluster analysis ):是一组将研究对象分为相对同质的群组(clusters)的统计分析技术.聚类分析也叫分类分析,或者数值分类.聚类的输入是一组未被标记的样本,聚类根 ...