2016-04-25 4 views
0

Ich versuche, Zeilen von Radio-Schaltflächen in einer Tabelle in R/Shiny mit HTML einzubetten. Aus Shiny HTML-Beispielen kann ich Zeilen mit Optionsfeldern erstellen und die Eingabewerte abrufen (Eingabe $ a1value, Eingabe $ a2value), kann diese Werte jedoch nicht lesen, wenn ich sie in HTML-Tabelle umgebe. Siehe Code unten:In R Shiny, wie HTML-Radio-Schaltflächen in einer Tabelle eingebettet werden

ui <- shinyUI(fluidPage(

    mainPanel(
     uiOutput("htmltable"), 
     textOutput("a1value"), 
     textOutput("a2value") 

) 
)) 

server <- shinyServer(function(input, output) { 

    output$htmltable <- renderText({ 
    HTML(' 
     <table class="data table table-bordered table-condensed"> 
     <tr><td> 

     <div id="a1" class="form-group shiny-input-radiogroup shiny-input-container"> 
     <label class="control-label" for="a1">Radio button in a table example </label> 
     <div class="shiny-options-group"> 
     <div class="radio"> <td><label><input type="radio" name="a1" checked="checked" value="1"></label></td> 
     </div><div class="radio"> <td><label><input type="radio" name="a1" value="2"> </label></td> 
     </div><div class="radio"> <td><label><input type="radio" name="a1" value="3"> </label></td> 
     </div><div class="radio"> <td><label><input type="radio" name="a1" value="4"> </label></td> 
     </div><div class="radio"> <td><label><input type="radio" name="a1" value="5"> </label></td> 
     </div></div></div> 
     </td></tr> 
     <tr><td> 
     <div id="a2" class="form-group shiny-input-radiogroup shiny-input-container"> 
     <label class="control-label" for="a2"> </label> 
     <div class="shiny-options-group"> 
     <div class="radio"> <td><label><input type="radio" name="a2" checked="checked" value="1"></label></td> 
     </div><div class="radio"> <td><label><input type="radio" name="a2" value="2"> </label></td> 
     </div><div class="radio"> <td><label><input type="radio" name="a2" value="3"> </label></td> 
     </div><div class="radio"> <td><label><input type="radio" name="a2" value="4"> </label></td> 
     </div><div class="radio"> <td><label><input type="radio" name="a2" value="5"> </label></td> 
     </div></div></div> 
     </td></tr> </table>')}) 

    output$a1value <- renderText({input$a1}) 
    output$a2value <- renderText({input$a2}) 

}) 

shinyApp(ui=ui,server=server) 

Ich kann a1value und a2value erhalten, bevor die HTML mit der Tabelle HTML-Konstrukt Einwickeln aber nicht danach.

Antwort

0

Ein Beispiel mtcars-Datensatz

Unsere Funktion unter Verwendung der HTML-Tabellenelemente

ff <- function(i)data.frame(vals = sprintf("<td>%s</td>",mtcars[i,1]),rads = sprintf('<td><div class="form-group shiny-input-container"><input name="row-%s" type="checkbox" id="row-%s" /><label for="row-%s">%s</label></div>',i,i,i,row.names(mtcars[i,])))

precompile Tabelle

a <- rbind.pages(lapply(1:15,function(x)ff(x)))

für die Header zu bauen

ths <- paste("<tr>\n",paste0(paste0("<th>",colnames(a),"</th>"),collapse = "\n"),"\n</tr>",sep="") %>%HTML

Für den Körper

tbods <- paste0(apply(a,1,function(i)sprintf("<tr>%s</tr>",paste0(i,collapse = ""))),collapse="\n")%>%HTML

würden Sie renderUI auf der Seite Server

tagList(tags$table(tags$head(ths),tags$tbody(tbods)))%>%html_print

UPDATE verwenden: Ich verwende den mtcars Dataset

mtcars$html <- llply(1:nrow(mtcars),function(i) 
HTML(sprintf('<div><input type="radio" name="myRadio" value="%s" class="our-class" id="%s"/> %s <label for="%s">%s</label></div>',i,row.names(mtcars)[[i]],i,row.names(mtcars)[[i]],row.names(mtcars)[[i]])))%>%unlist 

HINWEIS: das ist meine Funktion intern, aber die Funktion, die wir vor der Tabelle

aa<-rt.table_prep(mtcars) 


tags$html(tags$head(tags$link(href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"),tags$script(src="https://code.jquery.com/jquery-1.10.2.js")),tags$body(tags$div(class="container",tags$div(class="row",tags$div(id = "log",style="font-size:56px"),tags$table(tags$thead(aa[[1]]),tags$tbody(aa[[2]])))),tags$script(HTML("$('input').on('click',function(){$('#log').html($('input:checked').val()+'is checked');});"))))%>%html_print 

, die uns gibt zu machen verwendet verwenden: http://codepen.io/CarlBoneri/pen/YqOBBN

+0

Dank Carl. Sie haben eine elegantere Methode zum Generieren der Tabelle gezeigt, aber ich habe immer noch Probleme, die Werte der Kontrollkästchen zu lesen. – user6253481

+0

Jedes Kontrollkästchen hat die Nummer der ursprünglichen Zeilennummer. Der Eingang [[row-nth]] greift dann auf die Werte zu, indem er eine Schleife in einem reaktiven Element verwendet. –

+0

Danke für die schnelle Antwort Carl. Kannst du mir als HTML- und R-Neuling zeigen, wie die reaktive Schleife aussehen würde? Danke noch einmal. – user6253481