如何将矢量作为参数传递给switch语句

时间:2015-09-29 04:40:22

标签: r list vector parameters switch-statement

我的Google搜索问题没有返回有用的结果,?switch的文档并没有告诉我我是多么希望能在这里得到答案。

说我有一个矢量:

cases<- c("one","two","three")

我想使用带有这些元素的switch语句作为switch语句的参数:

switch(input,cases)

以上只会输出input=1的任何内容,在这种情况下它会输出:

switch(1,cases)
# [1] "one" "two" "three"

任何其他参数都不会返回任何内容。我可以获得所需行为的唯一方法是,如果我在switch语句中明确键入这样的情况:

switch(2,"one","two","three")
# [1] "two"

我希望我能在list()中传递list / vector / whatever作为参数的行为,并实现以下行为:

switch(2,cases)
# [1] "two"

1 个答案:

答案 0 :(得分:7)

switch函数接受一个表达式,指示从函数的其余参数中选择哪个参数号。如您所知,这意味着您需要在调用switch时将矢量拆分为单独的参数。您可以通过将向量转换为包含as.list的列表,然后将每个列表元素作为单独的参数传递给switchdo.call来实现此目的:

do.call(switch, c(1, as.list(cases)))
# [1] "one"
do.call(switch, c(2, as.list(cases)))
# [1] "two"
do.call(switch, c(3, as.list(cases)))
# [1] "three"

我没有看到使用简单向量索引这样做的好处:

cases[1]
# [1] "one"
cases[2]
# [1] "two"
cases[3]
# [1] "three"