前言:本章为之前文章“R语言——分支语句”的补充内容
目录
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语言——分支语句”补充了一些实际编写代码可能需要注意的细节。