【问题标题】:Getting multiple checkbox values in Shiny在 Shiny 中获取多个复选框值
【发布时间】:2013-05-15 07:36:03
【问题描述】:

我在侧面板中有一系列复选框,在sidebarPanel 中定义如下:

sliderInput("days", 
                "Days to monitor:", 
                min = 1, 
                max = 50, 
                value = 5),
    checkboxInput("display_CMC", "Carolinas Medical Center", TRUE),
    checkboxInput("display_MariaParham", "Maria Parham", TRUE),
    checkboxInput("display_WakeMed", "Wake Med", TRUE)

我想以编程方式将这些结果转换为字符向量(例如,如果我有一个名为 'display_ 的 checkboxInput,我希望它自动解析结果)。为此,我尝试了:

displayIdx <- grep( "display_", names(input) )
facilityCode_keep <- names(input)[ displayIdx ][ input[ displayIdx ] ]

不幸的是,这会导致:

Error: Single-bracket indexing of reactivevalues object is not allowed.

两个问题:

  1. 如何将一系列checkboxInputs 转换为字符向量?
  2. 不允许使用单括号索引是怎么回事。如果我尝试分配给 input,我可以理解,但我不是。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    如何将一系列 checkboxInputs 转换为字符向量?

    您可以使用双括号索引。但在这种情况下,您可以考虑改用 checkboxGroupInput 函数,它返回所选值的字符向量。

    为什么不用单括号索引?

    单括号索引是子集,而双括号索引是元素检索(或类似的东西)。输入对象更像是一个地图/哈希/字典/环境,而不是一个命名向量,所以子集实际上没有意义。 (同样,R 的环境对象不能单括号索引,只能双括号索引。)

    【讨论】:

    • 完美,谢谢!知道为什么不允许使用单括号索引吗?
    • 单括号索引是子集,而双括号索引是元素检索(或类似的东西)。 input 对象更像是 map/hash/dict/environment 而不是命名向量,因此子集化实际上没有意义。 (同样,R 的环境对象不能单括号索引,只能双括号索引。)
    • 感谢您提供非常丰富的答案。我已将其添加到您的回复中。
    • 在某些情况下,能够对输入对象进行子集化会很有用,例如,如果您想使用以下内容为一组动态输入创建事件侦听器:reactive([input [grepl(pattern = "prefix",names(input))]},{...}) 作为 eventReactive() 的输入。这可以通过明确的输入列表来完成,请参阅:stackoverflow.com/questions/34731975
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多