2015-11-18 154 views
1

我试图使selectInput()中的选项组,但看到以下意外结果。R闪亮selectInput():多个选项组不能使用一个选项

如果您输入您的控制台下面一行:

selectInput("test", "I am test", choices = list("Group A" = c("a", "b", "c"), "Group B" = "d")) 

你应该看到下面的输出:

<div class="form-group shiny-input-container"> 
    <label class="control-label" for="test">I am test</label> 
    <div> 
     <select id="test"> 
     <optgroup label="Group A"> 
      <option value="a" selected>a</option> 
      <option value="b">b</option> 
      <option value="c">c</option> 
     </optgroup> 
     <option value="d">Group B</option>  <====== wrong 
     </select> 
     <script type="application/json" data-for="test" data-nonempty="">{}</script> 
    </div> 
</div> 

与上面的代码的问题是,在Group B应该是optgroup label代替option text。我想象上面的代码应该返回以下内容:

<div class="form-group shiny-input-container"> 
    <label class="control-label" for="test">I am test</label> 
    <div> 
     <select id="test"> 
     <optgroup label="Group A"> 
      <option value="a" selected>a</option> 
      <option value="b">b</option> 
      <option value="c">c</option> 
     </optgroup> 
     <optgroup label="Group B">   <====== correct 
      <option value="d">d</option>  <====== correct 
     </optgroup>       <====== correct 
     </select> 
     <script type="application/json" data-for="test" data-nonempty="">{}</script> 
    </div> 
</div> 

这是预期吗?如果没有,我该如何解决?

回答

2

你可以把你Group B选择在列表中得到你想要的输出:

selectInput("test", "I am test", choices = list("Group A" = c("a", "b", "c"), "Group B" = list("d"))) 
+1

完美的作品。只是一个插件,如果选项是从其他来源提取的,而且您不知道将获得多少选项,则可以执行'as.list'来确保每个选项都是列表项。例如,“组B”= as.list(等级(虹膜$物种))'。 – Boxuan