2016-03-03 13 views
5

Shiny'u çoktan seçmeli öğeler için bir değerlendirme aracı olarak kullanmaya çalışıyorum. Bu nedenle, bazı durumlarda, bir görüntü olarak bir seçim yapmak istiyorum. Bunun yerine, ham HTML gösterilir. Bu Parlak olarak yapılabilir mi?Parlak olarak radioButton seçeneği olarak bir resminiz var mı?

library(shiny) 

choices <- c('\\(e^{i \\pi} + 1 = 0 \\)' = 'equation', 
      '<img src="Rlogo.png">' = 'logo') 

ui <- shinyUI(fluidPage(
    withMathJax(), 
    img(src='Rlogo.png'), 
    fluidRow(column(width=12, 
     radioButtons('test', 'Radio buttons with MathJax choices', 
        choices = choices, inline = TRUE), 
     br(), 
     h3(textOutput('selected')) 
    )) 
)) 

server <- shinyServer(function(input, output) { 
    output$selected <- renderText({ 
     paste0('You selected the ', input$test) 
    }) 
}) 

shinyApp(ui = ui, server = server) 

Sen bu app.r komut dosyası yerleştirin nereye www dizinde R logosu koymak zorunda kalacaktır. isimler span düzenlenen ve tags$span böylece tüm HTML kaçan kullanılarak üretilir çünkü http://i1.wp.com/www.r-bloggers.com/wp-content/uploads/2016/02/Rlogo.png?resize=300%2C263

cevap

3

img radyo düğmeleri görüntülenmez: İşte logosu doğrudan bağlantıdır.

sadece bir kez yapmanız varsa, görüntüyü, radioButtons('test', 'Radio buttons with MathJax choices', choices = choices, inline = TRUE) çıktısını kopyalamak bir tags$div koyun ve ekleyebilirsiniz: Eğer bunu defalarca yapmak gerekirse,

 fluidRow(column(width=12, 
         tags$div(HTML('<div id="test" class="form-group shiny-input-radiogroup shiny-input-container shiny-input-container-inline"> 
    <label class="control-label" for="test">Radio buttons with MathJax choices</label> 
             <div class="shiny-options-group"> 
             <label class="radio-inline"> 
             <input type="radio" name="test" value="equation" checked="checked"/> 
             <span>\\(e^{i \\pi} + 1 = 0 \\)</span> 
             </label> 
             <label class="radio-inline"> 
             <input type="radio" name="test" value="logo"/> 
             <span><img src="http://i1.wp.com/www.r-bloggers.com/wp-content/uploads/2016/02/Rlogo.png?resize=300%2C263"/></span> 
             </label> 
             </div> 
             </div> ')), 
         br(), 
         h3(textOutput('selected')) 
     )) 

yapabilirsiniz bir radioButtons_withHTML işlevi tanımlayın:

radioButtons_withHTML <- function (inputId, label, choices, selected = NULL, inline = FALSE, 
      width = NULL) 
{ 
     choices <- shiny:::choicesWithNames(choices) 
     selected <- if (is.null(selected)) 
       choices[[1]] 
     else { 
       shiny:::validateSelected(selected, choices, inputId) 
     } 
     if (length(selected) > 1) 
       stop("The 'selected' argument must be of length 1") 
     options <- generateOptions_withHTML(inputId, choices, selected, inline, 
            type = "radio") 
     divClass <- "form-group shiny-input-radiogroup shiny-input-container" 
     if (inline) 
       divClass <- paste(divClass, "shiny-input-container-inline") 
     tags$div(id = inputId, style = if (!is.null(width)) 
       paste0("width: ", validateCssUnit(width), ";"), class = divClass, 
       shiny:::controlLabel(inputId, label), options) 
} 

generateOptions_withHTML <- function (inputId, choices, selected, inline, type = "checkbox") 
{ 
     options <- mapply(choices, names(choices), FUN = function(value, 
                    name) { 
       inputTag <- tags$input(type = type, name = inputId, value = value) 
       if (value %in% selected) 
         inputTag$attribs$checked <- "checked" 
       if (inline) { 
         tags$label(class = paste0(type, "-inline"), inputTag, 
            tags$span(HTML(name))) 
       } 
       else { 
         tags$div(class = type, tags$label(inputTag, tags$span(HTML(name)))) 
       } 
     }, SIMPLIFY = FALSE, USE.NAMES = FALSE) 
     div(class = "shiny-options-group", options) 
} 

özgün bir fark düğmeleri adları oluşturmak için çağrı generateOptions_withHTML olduğunu veyaklaşık HTML() fonksiyonu eklendi Kaçmayı önlemek için tags$span numaralı telefondan 210. Bu işlevleri başka bir dosyaya koyabilir ve source'u kullanabilirsiniz.

radioButtons'nizi oluşturmak için radioButtons_withHTML('test', 'Radio buttons with MathJax choices',choices = choices, inline = TRUE) kullanabilirsiniz.

+0

Teşekkürler! Bu tam ihtiyacım olan şey. Rstudio'nun bunu ana Shiny sürümüne dahil etmesi hoş olurdu. – jbryer

İlgili konular