R中带有重复命令的Switch语句

Posted

技术标签:

【中文标题】R中带有重复命令的Switch语句【英文标题】:Switch Statement with repeated commands in R 【发布时间】:2013-06-14 16:55:12 【问题描述】:

在 R 中,有没有办法制作一个 switch 语句,以便为两种不同的情况执行相同的代码块?显然,我可以复制并粘贴这两个语句的整个代码,但我希望有一种更简洁的方法来做到这一点。

我也可以使用 if-else 块来避免大块代码的重复,但在 R 中切换通常更快。

由于 R 将 switch 语句解析为函数的方式,这似乎不太可能,但我希望 R 的开发人员在解析 switch 语句时特别小心,以允许多个参数引用相同的代码块.

【问题讨论】:

你谈论函数switch的方式对我来说没有多大意义,你能提供一个小例子来说明你想要做什么吗? 不确定我是否遵循,但是使用您想要的代码块创建一个函数会以一种直接且 R-ish 的方式完成此操作。 @joran 他想要类似于 C 的 switch 的东西,除非添加明确的 break,否则它具有“失败”行为。 IIRC,这通常被认为是一件坏事,尽管人们已经用它编写了一些可怕的黑客。此外,citation needed 断言 switch 比 if 更快。 @HongOoi 所以听起来这与switch 函数没有任何关系,那么,它似乎更受限制......? 速度的引用:***.com/questions/7825501/switch-statement-usage 【参考方案1】:

提供没有值的命名参数,它们会传递到下一个有值的表达式

> switch("A", A=, B=, C="A OR B OR C", "Other")
[1] "A OR B OR C"
> switch("C", A=, B=, C="A OR B OR C", "Other")
[1] "A OR B OR C"
> switch("D", A=, B=, C="A OR B OR C", "Other")
[1] "Other"

这在帮助页面?switch中有描述

 If 'EXPR' evaluates to a character string then that string is
 matched (exactly)to the names of the elements in '...'.  If there
 is a match then that element is evaluated unless it is missing, in
 which case the next non-missing element is evaluated, so for
 example 'switch("cc", a = 1, cc =, cd =, d = 2)' evaluates to '2'.

【讨论】:

谢谢。我认为它们不是那样工作的,因为在 Java 中,您需要明确的 break 才能使它们不会落入下一个表达式;没有休息让我相信在 R 中总是没有失败。

以上是关于R中带有重复命令的Switch语句的主要内容,如果未能解决你的问题,请参考以下文章

字符串作为switch语句[重复]

R中的switch语句帮助

在swift中使用switch语句的布尔函数[重复]

R语言switch语句语法实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题

您是不是需要在switch语句JS中使用默认值[重复]

在switch语句中声明变量[重复]