【问题标题】:Switch Statements in R (Unpacking Arguments)R 中的 Switch 语句(解包参数)
【发布时间】:2013-03-15 14:42:33
【问题描述】:

Google 搜索在这方面的回报并不多。如何在 R 中解压缩参数?

例如,如果我尝试在 R 中使用 switch,例如

switch("AA",c("AA"=5,"BB"=6))

我会回复c("AA"=5,"BB"=6),而实际上我想要 5 个。

基本上,我希望能够使用矢量映射来完成switch("AA","AA"=5,"BB"=6)

【问题讨论】:

  • 抱歉,我要 5 个 :)
  • @user1431282 解包参数是什么意思。这是 python 意义上的吗?
  • @agstudy 我想他在想这个stackoverflow.com/questions/3414078/…
  • @Qbik 谢谢。这是该术语的 Python 含义。(在链接中已确认)。

标签: r


【解决方案1】:

您的示例很短,也许您可​​以通过这种方式获得所需的功能:

my.vector = c("AA"=5,"BB"=6)
my.vector[names(my.vector ) == "AA"]

AA 
 5 

?

【讨论】:

    【解决方案2】:

    这是一种解决方法,但请尝试:

    do.call("switch", append(list("AA"), list("AA"=5, "BB"=6)))
    

    do.call() 允许您将参数列表传递给switch()

    【讨论】:

    • +1 - 或do.call(switch, as.list(c(EXPR = "AA", c("AA"= 5,"BB"= 6))))
    • 这不能简化为do.call("switch", append("AA", list("AA"=5, "BB"=6)))list("AA") 有什么作用?
    • @Thomas 可以按照您的建议缩短。 list("AA") 是为了确保没有任何类型的强制出错。您的缩短版本是在附加另一个列表之前将一个元素字符向量转换为一个元素列表。
    【解决方案3】:

    这就是switch 的用途。第一个参数被评估并匹配到后续配对列表的第一个元素:

     aa <- "AA"
     switch(aa,"AA"=5,"BB"=6)
    #[1] 5
     switch("BB","AA"=5,"BB"=6)
    #[1] 6
    

    至少这是“字符”参数的策略。数字参数的过程是不同的。需要仔细阅读?switch的详细信息部分。

    【讨论】:

      【解决方案4】:
      > c("AA"=5,"BB"=6)["AA"]
      AA 
       5 
      > c("AA"=5,"BB"=6)["BB"]
      BB 
       6 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多