微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我创建了一个闪亮的应用程序,用户输入一些数据,然后根据列将数据拆分为多组行,例如 this。这给了我不同的数据集组。数据集的组数总是不同的,因为它取决于用户在列中输入的内容,该列用于将数据拆分为行组。 我知道如何显示单个数据集,但如何显示这些作为不同表中输出的数据集? 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)
      
    })
    

  }
)

用户界面:-

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

enter image description here

再次显示同一张表

enter image description here

解决方法

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

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

一些关于这样的事情的额外阅读:

Unknown number of tables to be presented in Shiny

Output N tables in Shiny

Dynamic Number of Output Elements

Shiny Example with Dynamic Number of Plots

编辑: 您的用户界面很好,您可以将其用作您的服务器:

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

    return(splitRenders)
    
  })

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。