2015-06-19 14 views
5

Ich habe diese Art von Radio-Button:R Shiny hinzufügen Separator in Radio-Button-Liste Auswahl

   radioButtons("test", "test:", 
          c("def" = "def", 
          "ghi" = "ghi", 
          "jkl" = "jkl") 

Aber ich möchte einen Separator wie tag$hr hinzufügen def von den anderen zu trennen. Ich habe versucht, zwei Liste wie folgt zu machen:

radioButtons("test", "test:", 
c("def" = "def"), 
tag$hr , 
radioButtons("test", "test:", 
c("ghi" = "ghi", 
"jkl" = "jkl") 

aber es funktioniert nicht.

danke!

+0

Haben Sie mit den CSS-Einstellungen versucht zu spielen? Scheint mir das wäre viel einfacher. Im Moment erstellen Sie zwei RadioButtons-Elemente mit demselben Namen. –

Antwort

-1
radioButtons("test1", "test:", 
c("def" = "def"),selected = NULL), 
tags$hr() , 
radioButtons("test2", "test:", 
c("ghi" = "ghi", 
"jkl" = "jkl"),selected = NULL) 

Hallo, Sie wollen zwei separate Radio-Buttons? es ist Tags $ hr, nicht tag $ hr. sollten Sie auch einen eindeutigen Namen für jedes Radioboxen geben. test1 und test2.

+1

Hallo, wenn Radios unterschiedliche Namen haben, können sie sofort ausgewählt werden. – user3355655

3

In meiner Erfahrung mit Shiny App Entwicklung habe ich die "Inspect Source" -Funktion der modernen Browser unglaublich mächtig gefunden. Sie können HTML/CSS/JS hinter Webseiten sehen und dann können Sie damit Ihre Arbeit abbilden. Mit Shiny können Sie HTML/CSS direkt in Ihre App einfügen. Durch Ausführen des von Ihnen bereitgestellten radioButtons-Befehls konnte ich dann mithilfe der Entwicklerfunktion von Chrome genau den HTML-Code anzeigen, der die Radiobuttons erstellt hat. Dann können Sie eine Stunde direkt zwischen Ihren Optionen einfügen. Ich fügte auch eine neue hr-Klasse hinzu, die im Kopf radio genannt wird, weil die hr standardmäßig ein wenig padding hat und ein sehr ähnliches Grau wie das Eingabefeld ist. Vielleicht möchten Sie auch in der Lage sein, eine normale hr woanders in der App zu verwenden.

Es könnte eine einfachere Möglichkeit geben, dies zu tun, dass jemand, der ein bisschen mehr von einem HTML/CSS-Pro ist, sprechen könnte. Hoffe das hilft.

library(shiny) 


ui <- fluidPage(
    tags$head(
      tags$style(HTML(
       "hr.radio { 
        border: 0; 
        border-top: 1px solid #8c8b8b; 
        padding-top: 1; 
       }" 
     )) 
    ), 


    titlePanel("New Radio Button Style"), 


    sidebarLayout(
     sidebarPanel(HTML(" 
<div id='test' class='form-group shiny-input-radiogroup shiny-input-container shiny-bound-input'> 
    <label class='control-label' for='test'>test</label> 
<div class='shiny-options-group'> 
    <div class='radio'> 
      <label> 
       <input type='radio' name='test' value='one' checked='checked'> 
       <span>one</span> 
      </label> 
    </div> 
    <hr class ='radio'> 
    <div class='radio'> 
      <label> 
       <input type='radio' name='test' value='two'> 
       <span>two</span> 
      </label> 
    </div> 
    <hr class = 'radio'> 
    <div class='radio'> 
      <label> 
       <input type='radio' name='test' value='three'> 
       <span>three</span> 
      </label> 
    </div> 
</div> 
</div>") 

    ), 

     # You can see the input$test is still reacting with the radiobuttons 
     mainPanel(
     textOutput("selection") 
    ) 
    ) 
) 


server <- function(input, output) { 

    output$selection <- renderText({ 
     input$test 
    }) 
} 


shinyApp(ui = ui, server = server) 
0

ist hier JavaScript/jQuery Lösung. Es findet das div-Element, das das Optionsfeld def enthält, und fügt danach ein <hr> ein.

radioButtons("test", "test:", 
      c("def" = "def", 
       "ghi" = "ghi", 
       "jkl" = "jkl")), 
tags$head(tags$script(HTML(" 
          $(document).ready(function(e) { 
           $('input[value=\"def\"]').parent().parent().after('<hr>'); 
          }) 
          ")))