2016-04-25 39 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