9

如何使用复选框从数据框或表中选择数据行?我已经完成了以下代码,但似乎复选框项目是列,并没有真正显示结果。

谢谢你的帮助。

服务器.R

   shinyServer(function(input, output) {
       dataset<-reactive({
         data(cars)
         cars
       })

       output$choose_data <- renderUI({
         checkboxGroupInput("dtab", "Data Table", dataset()) 
    })

       dataset2<-reactive({
         input$dtab         
    })      

       output$data_table <- renderTable({
         data2()                    
       })
    })

用户界面

   shinyUI(pageWithSidebar(
         headerPanel(""),

         sidebarPanel(
         uiOutput("choose_data"),
         br()
         ),

        mainPanel(
        wellPanel("Data", tableOutput("data_table")
    ))))
4

3 回答 3

4

你好,你可以试试 package ReporteRs,有一个FlexTable创建 html 表(或 word 表)的功能,一个例子:

library("shiny")
library("ReporteRs")
mymtcars <- head(mtcars)

# ui
ui <- fluidPage(
  tags$h1("Table with checkboxes"),
  tableOutput(outputId = "table"),
  br(),
  verbatimTextOutput(outputId = "out")
)
# server
server <- function(input, output) {
  output$table <- renderFlexTable({
    # Create checkboxes
    mymtcars$Name <- paste0('<label><input type="checkbox" id="car', seq_along(rownames(mymtcars)), '"> <span>', rownames(mymtcars), '</span></label>')
    mymtcars <- mymtcars[c("Name", names(mtcars))] # Put col 'Name' in the first place
    ft <- vanilla.table(mymtcars) # convert to FlexTable objet
    ft[, "Name", to = "header"] <- parLeft() # left align checkboxes
    ft[, "Name"] <- parLeft() # left align header
    return(ft)
  })
  # the inputs created are in input$car1, input$car2, ...
  output$out <- renderPrint({
    # results
    res <- unlist(lapply(1:nrow(mymtcars), function(i) input[[paste0("car", i)]]))
    print(res)
    if (any(res)) {
      print(rownames(mymtcars)[res])
    }
  })
}
# launch app
shinyApp(ui = ui, server = server)

结果如下:

ft_example

有关 FlexTable 对象的更多信息,您可以查看此处

于 2016-04-25T13:02:39.707 回答
0

一个例子。checkboxGroupInput请注意我如何设置标签,并使用为,指定的 idchoose_row作为output$data_table. 这可以替换您的server.R文件。

shinyServer(function(input, output) {

  data(cars)
  cars <- cars[1:10,] ## limit ourselves to first 10 rows for example

  ## a UI element that we can use for selecting rows
  output$choose_data <- renderUI({
    labels <- setNames( as.list(1:nrow(cars)), paste("Row", 1:nrow(cars)) )
    checkboxGroupInput("choose_row", "Select Rows", labels)
  })

  ## render the data.frame at the selected rows
  output$data_table <- renderTable({
    cars[input$choose_row, ]
  })
})
于 2013-09-27T05:51:16.410 回答
0

添加一些 HTML 标签并使用 `DT::datatable(escape = F) 来显示。下面的代码很容易解释。

  1. <input type="checkbox" id="checkbox1" class="styled">是一个复选框标签。
  2. DT::datatable(escape = F)构建一个html页面。

{r} library(tidyverse) tibble( x = '<input type="checkbox" id="checkbox1" class="styled">This is a checkbox' ) %>% DT::datatable(escape = F)

在此处输入图像描述

于 2018-11-10T16:53:40.863 回答