我对这个问题的谷歌搜索没有返回有用的结果和 ?switch
的文档。没有告诉我如何所以我希望我能在这里得到答案。
假设我有一个向量:
cases<- c("one","two","three")
我想使用带有这些元素的 switch 语句作为 switch 语句的参数:
switch(input,cases)
如果
input=1
,上面只会输出任何东西在这种情况下,它将输出:switch(1,cases)
# [1] "one" "two" "three"
任何其他参数都不会返回任何内容。我可以获得所需行为的唯一方法是,如果我在 switch 语句中明确键入 case,如下所示:
switch(2,"one","two","three")
# [1] "two"
我想要这样的行为,我可以在 switch() 中将列表/向量/任何内容作为参数传递并实现以下行为:
switch(2,cases)
# [1] "two"
最佳答案
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"
关于r - 如何在 switch 语句中将向量作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835812/