r - 如何在 switch 语句中将向量作为参数传递

标签 r list vector parameters switch-statement

我对这个问题的谷歌搜索没有返回有用的结果和 ?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 将向量转换为列表来实现此目的。然后将每个列表元素作为单独的参数传递给 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"

关于r - 如何在 switch 语句中将向量作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835812/

相关文章:

r - 将数据帧转换为 R 中一列的长格式

.net - 在运行时转换类型化数组

c++ - 在类中使用 vector 的二维矩阵

r - 使用 rbind 组合两个向量

r - 用于计算 Cohen 的 f2 效应大小的 R 代码(对于多级模型)

r - Dendextend:关于如何根据定义的组为树状图的标签着色

c++ - 如何调用父类类型列表的子类的方法? C++

python - 如何计算列表中每三个值的平均值

matlab - 如何在 MatLab 中按元素组合两个大小相等的向量?

windows - R:即使指定编码也无法读取unicode文本文件