2015-11-18 183 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