如何以闪亮的方式显示已拆分为不同部分的数据?

How to display data in shiny which has been splitted into different parts?

我创建了一个闪亮的应用程序,用户可以在其中输入一些数据,然后根据列将数据分成几组行,例如 this。这给了我不同的数据集组。数据集组的数量总是不同的,因为它取决于用户在用于将数据拆分为行组的列中输入的内容。 我知道如何显示单个数据集,但如何显示这些作为不同 table 输出的数据集组? I also made a short video which explains visually what i need help with

服务器:-

library(shiny)
data(iris)
shinyServer(
  
  function(input, output) {
    
    output$data <- renderUI({
      splitDFs<- split(iris, iris$Species)
      splitRenders <- lapply(splitDFs, renderTable)
      return(splitRenders)
      # head(iris)
      
    })
    

  }
)

UI:-

library(shiny)
shinyUI(fluidPage(
  titlePanel(title = h4("Iris Dataset", align="center")),
  sidebarLayout(
    sidebarPanel(
    ),
    
    mainPanel(
      uiOutput("data"),
                  
      )
      
    )
    
  ))

再次显示相同的table

您可以查看 uiOutputrenderUI。这些允许您传递动态渲染对象或对象列表。您的 ui 中有 uiOutput("someName"),然后服务器中有 output$someName <- renderUI(...)

renderUI 中,您执行拆分。然后将每个结果放入 renderTable,然后 return renderTable 个对象的列表。

关于此类内容的一些补充阅读:

Output N tables in Shiny

Shiny Example with Dynamic Number of Plots

编辑: 您的 ui 没问题,您可以将其用作您的服务器:

output$data <- renderUI({
    splitDFs<- split(iris, iris$Species)
    
    splitRenders <- lapply(1:length(splitDFs), function(x) renderTable(splitDFs[[x]]))

    return(splitRenders)
    
  })

之前版本的问题是 lapply renderTable 由于某种原因没有直接获取 splitDFs* 的元素,它每次都只获取最后一个。这显式地提取了单独的分割数据帧并正确地 builds 渲染,所以它现在应该可以工作了。

  • 这很奇怪,因为 lapply 在其他情况下可以正常工作,例如当函数打印时。它可能类似于 ggplot,其中数据帧被传入但直到最后才被评估,因此 renderTable 被最新的覆盖。