如何解决如何以闪亮的方式显示已拆分为不同部分的数据?
我创建了一个闪亮的应用程序,用户输入一些数据,然后根据列将数据拆分为多组行,例如 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"),)
)
))
再次显示同一张表
解决方法
您可以查看 uiOutput
和 renderUI
。这些允许您传递动态渲染对象或对象列表。您的用户界面中有 uiOutput("someName")
,然后服务器中有 output$someName <- renderUI(...)
。
在 renderUI
中,您执行拆分。然后将每个结果放入 renderTable
,然后返回 renderTable
对象列表。
一些关于这样的事情的额外阅读:
Unknown number of tables to be presented 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 举报,一经查实,本站将立刻删除。