【问题标题】:Output more than 1 datatables in shiny main panel在闪亮的主面板中输出超过 1 个数据表
【发布时间】:2017-04-19 18:41:54
【问题描述】:

我有一个闪亮的应用程序,用户可以检查他们是否希望数据表显示在主面板中。根据数字输入,如果他们选择 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)

【问题讨论】:

  • 您要显示哪些表格?如果用户选择1,是否要显示df1,如果是2,是否显示df1df2,如果是3,是否显示全部三个?这仅限于 3 张桌子吗?
  • 您创建数据集的代码似乎不起作用!
  • 您好-是的,如果用户选择 1,我想显示 df1 ,如果他选择 3 ,则显示所有三个 df1 df2 和 df3 。它不限于3张桌子。它可能不止于此。我完全同意当用户尝试显示数据框时我的代码不起作用。我是 R 和闪亮的新手,非常感谢您的帮助。谢谢

标签: r for-loop shiny lapply dt


【解决方案1】:

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

然后您将看到必须创建多个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)

【讨论】:

  • 谢谢。这就是我要找的。一个问题,虽然在您的代码中声明“lapply(1:10,function(i){”,但我可以将 10 更改为 input$amountTable。这个数字取决于用户输入。我可以有 10、100、 1000. 欣赏它。
  • 嗨,抱歉没有看到评论。对代码进行了更改。
  • 感谢您的回复。我知道我要求太多了。有没有一种方法,当用户最初为 Amount Tables 选择 3 时,它将显示 3 个表,但是如果他决定为 Amount Tables 选择 1,它将只显示 1 个表。目前它仍然显示3张桌子。它确实清除了主面板。感谢您对此的帮助
  • 我认为removeUI() 应该可以做到这一点。如果您需要其他帮助,我建议您提出一个新问题,因为其他人可能很难跟踪更改
  • 谢谢,我会提交一个新问题。祝你有美好的一天!
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 2014-04-11
  • 2018-09-02
相关资源
最近更新 更多