2016-04-25 68 views
0

內HTML單選按鈕我試圖使用HTML在R /閃亮的表中嵌入單選按鈕的行。從閃亮的HTML示例我可以創建單行按鈕並獲取輸入值(輸入$ a1value,輸入$ a2value),但是當我將它包裝在表格HTML中時無法讀取這些值。請參見下面的代碼:就R閃亮如何嵌入一個表

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) 

我的包裹用HTML表格HTML結構而不是事後纔得到a1value和a2value。

回答

0

使用mtcars數據集

我們功能構建HTML表

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,])))

預編譯表元素

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

對於標頭的一個例子

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

對於身體

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

你會使用renderUI在服務器端

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

更新: 我使用mtcars數據集

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 

注:這是我的內部函數,而是用我們之前使用的功能,使表

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 

這給了我們:http://codepen.io/CarlBoneri/pen/YqOBBN

+0

感謝卡爾。您已經展示了一種更優雅的方式來生成表格,但我仍然在閱讀複選框的值時遇到問題。 – user6253481

+0

每個複選框都有我想要的原始行號。所以輸入[[row-nth]]將使用被動內部的循環訪問這些值。 –

+0

感謝Carl的快速反應。作爲HTML和R新手,你能告訴我反應循環是什麼樣子嗎?再次感謝。 – user6253481