hig*_*dth 3 boolean r switch-statement
显然,switch存在逻辑参数问题,无法进行评估FALSE
.
> switch(T, "TRUE"=10, "FALSE"=50)
[1] 10
> switch(F, "TRUE"=10, "FALSE"=50)
(No return value)
Run Code Online (Sandbox Code Playgroud)
我知道,对于T/F值我可以使用if/else但是switch的问题是一个单独的问题.它导致更奇怪的事情,如
> switch(2, "TRUE"=10, "FALSE"=50, "2"=200)
[1] 50
> switch(2, "TRUE"=10, "FALSE"=50, 2=200)
Error: unexpected '=' in "switch(2, "TRUE"=10, "FALSE"=50, 2="
Error during wrapup: argument "fun" is missing, with no default
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,它是一个错误或功能?
?switch
说
EXPR:评估数字或字符串的表达式
如果你给它别的东西EXPR
,R会做最小的侵略性强制,可以转换EXPR
为数字或字符串; 在这种情况下,逻辑值将转换为数字.问题是当F
/ FALSE
被强制为数字时,它变为0,它不选择任何选项.这是一个黑客,但你可以使用
a <- FALSE
switch(a+1, "FALSE"=10, "TRUE"=50) ## 10
a <- TRUE
switch(a+1, "FALSE"=10, "TRUE"=50) ## 50
Run Code Online (Sandbox Code Playgroud)
...但您必须记住将选项置于FALSE/TRUE顺序(标签被忽略).我认为这是一个坏主意,因为它很棘手/非显而易见.我想,惯用的R就是
if (a) 50 else 10
Run Code Online (Sandbox Code Playgroud)
(这看起来似乎太棘手了,但实际上比ifelse()
标量比较更可取; ifelse()
如果你和你的同事发现它更具可读性,你可以毫不费力地使用它)
在第二个示例(switch(2, "TRUE"=10, "FALSE"=50, "2"=200)
)中,您给出了switch()
一个整数,因此R按位置选择(第二个选项的值为50).在第三个示例(switch(2, "TRUE"=10, "FALSE"=50, 2=200)
)中,2
不是参数的有效名称.
归档时间: |
|
查看次数: |
275 次 |
最近记录: |