我的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"
答案 0 :(得分:7)
switch
函数接受一个表达式,指示从函数的其余参数中选择哪个参数号。如您所知,这意味着您需要在调用switch
时将矢量拆分为单独的参数。您可以通过将向量转换为包含as.list
的列表,然后将每个列表元素作为单独的参数传递给switch
并do.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"