R语言——分支语句(补充)

本文补充了R语言中switch()函数的用法,强调了在条件判断中使用&&而非&以及||而非|以优化代码执行。此外,针对if()函数,文章推荐使用isTRUE(all.equal(x,y))来处理浮点数相等性,以克服计算机精度问题导致的误判。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:本章为之前文章“R语言——分支语句”的补充内容


目录

1.switch() 补充

2.首选的逻辑运算符

3.if() 函数中 all.equal() 的用法

总结


1.switch() 补充

switch() 使用方法:
switch(<expr:text>,<expr:case1> = <code1>,<expr:case2> = <code2>,...)

        当参变量 expr  的值不等于 case 中的任何一种情况时,switch() 函数会输出NULL。

        可以通过添加一个未命名的值,即一个<codei>,前面这个未命名的值将会代替 NULL 来输出。 

例子展示

#没有加 <codei> 的情况
switch(EXPR = "qq",a = 4,b = 2:3)
#加单个 <codei> 的情况
switch(EXPR = "qq",a = 4,b = 2:3,"Else: nothing")

结果展示

> #没有加 <codei> 的情况
> switch(EXPR = "qq",a = 4,b = 2:3)
> #加单个 <codei> 的情况
> switch(EXPR = "qq",a = 4,b = 2:3,"Else: nothing")
[1] "Else: nothing"

2.首选的逻辑运算符

        为了更好的使用逻辑运算符,建议使用:

  • x && y 而不是 x & y
  • x || y 而不是 x | y

如果使用 && ,将从左至右评估 if 后的条件,直到一个 FALSE 被发现为止.

> x = 0
> if(FALSE & as.logical(x = 2)) 4-1 else 3-1
#条件被判为 FALSE 且 x = 2 的语句被评估
[1] 2
> x
[1] 0

对比 && 的情况

x = 0
> if(FALSE && as.logical(x = 2)) 4-1 else 3-1
#条件依旧为FALSE 但 x = 2 没被评估(执行)
[1] 2
> x
[1] 0

注:|| 的情况类似

因此应该坚持使用这种长的形式,它可以让代码运行的更快

3.if() 函数中 all.equal() 的用法

        在使用 if() 函数时,应当:

  • 使用 isTRUE(all.equal(x,y)) 而不是 x == y
  • 使用 !isTRUE(all.equal(x,y)) 而不是 x != y

这是因为x 和 y 由于计算机精度问题并不是精确相等的

> x = 0.1
> y = 0.1
> x == y
[1] TRUE
> x = 0.2 - 0.1
> y = 0.3 - 0.2
> x == y #x 应该等于 y
[1] FALSE #但计算机精度有限制,导致结果判断为FALSE

利用 all.equal() 可以很好的解决这个问题

> x = 0.2 - 0.1
> y = 0.3 - 0.2
> all.equal(x,y,tolerance = 10^-6)
[1] TRUE

总结


本篇文章对之前的文章“R语言——分支语句”补充了一些实际编写代码可能需要注意的细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值