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

Edi*_*ana 7 parameters r list vector switch-statement

我的谷歌搜索问题没有返回有用的结果和文件?switch没有告诉我如何,所以我希望我能在这里得到这个答案.

说我有一个矢量:

cases<- c("one","two","three")
Run Code Online (Sandbox Code Playgroud)

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

switch(input,cases)
Run Code Online (Sandbox Code Playgroud)

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

switch(1,cases)
# [1] "one" "two" "three"
Run Code Online (Sandbox Code Playgroud)

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

switch(2,"one","two","three")
# [1] "two"
Run Code Online (Sandbox Code Playgroud)

我想要行为,我可以传递列表/向量/无论作为switch()中的参数,并实现以下行为:

switch(2,cases)
# [1] "two"
Run Code Online (Sandbox Code Playgroud)

jos*_*ber 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"
Run Code Online (Sandbox Code Playgroud)

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

cases[1]
# [1] "one"
cases[2]
# [1] "two"
cases[3]
# [1] "three"
Run Code Online (Sandbox Code Playgroud)