繁体   English   中英

在闪亮的主面板中输出1个以上的数据表

[英]Output more than 1 datatables in shiny main panel

我有一个闪亮的应用程序,用户可以检查他们是否要在主面板中显示数据表。 根据数字输入,如果他们选择1,则仅显示1个数据表;如果他们选择2,则将显示2个数据表。我不太确定如何在闪亮的R中进行编码,因为我是新手。 感谢您调查此事。 这是我的代码

library("shiny")
df1 <- data.frame("2010-01"=double(),
          "2010-02"=double(),
          "2010-03"=double(),
          "2010-04"=double()
          )

df1<-rbind(df1,setNames(as.list(c(10,20,30,40)), names(df2)))

df2 <- data.frame("2010-01"=double(),
          "2010-02"=double(),
          "2010-03"=double(),
          "2010-04"=double()
          )

df2<-rbind(df2,setNames(as.list(c(100,200,300,400)), names(df2)))

df3 <- data.frame("2010-01"=double(),
          "2010-02"=double(),
          "2010-03"=double(),
          "2010-04"=double()
          )

df3<-rbind(df3,setNames(as.list(c(1000,2000,3000,4000)), names(df2)))

ui <-fluidPage(
 sidebarPanel(
   checkboxInput("add_data", "Add Data Table(s)"),
   conditionalPanel(condition="input.add_data === true",
             numericInput("numofdata",
                          label="Number of Data Table(s):",
                          min = 1,
                          max = 3,
                          value = 1,
                          step = 1),
             uiOutput("num_of_data"),
             textOutput("see_ranges")
            ),

    actionButton("submit", "Submit")
 ),

 mainPanel(

 titlePanel("Output Data Table"),

 DT::dataTableOutput("datatable.view", width = "95%")

 ) # end of main panel
)

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

  output$num_of_data <- renderUI({
    lapply(1:input$numofdata, function(i) {
    print(trend_list())
  })
 })


 output$see_ranges <- renderPrint({
  print(trend_list())
 })

  data.filter <- reactive({

    df(i) 
  })

output$datatable.view <- DT::renderDataTable(
{
input$submit 
if (input$submit==0) return()

isolate({
for(i in 1:input$numoftrends) {
  datatable(data.filter(i), 
            rownames=FALSE,
            extensions = c("FixedColumns", "FixedHeader", "Scroller"), 
            options = list(searching=FALSE,
                           autoWidth=TRUE,
                           rownames=FALSE,
                           scroller=TRUE,
                           scrollX=TRUE,
                           pagelength=1,
                           fixedHeader=TRUE,
                           class='cell-border stripe',
                           fixedColumns = 
                          list(leftColumns=2,heightMatch='none')
                          )
          )
      }
  })
})
}

shinyApp(ui = ui, server = server)

您应该看一下这篇文章: http : //shiny.rstudio.com/gallery/creating-a-ui-from-a-loop.html

然后您将看到,必须创建多个renderDataTable而不是在一个renderDataTable()创建多个数据renderDataTable 同样在您的代码中,您像函数df()一样调用df但仅将其定义为变量。

请参见下面的通用运行示例。 编辑:更改了UI的动态部分。

library(DT)
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("amountTable", "Amount Tables", 1:10, 3)
    ),
    mainPanel(
      # UI output
      uiOutput("dt")
    )
  )
)

server <-  function(input, output, session) {
  observe({
    lapply(1:input$amountTable, function(amtTable) {
      output[[paste0('T', amtTable)]] <- DT::renderDataTable({
        iris[1:amtTable, ]
      })
    })
  })

  output$dt <- renderUI({
    tagList(lapply(1:input$amountTable, function(i) {
      dataTableOutput(paste0('T', i))
    }))
  })

}

shinyApp(ui, server)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM