如何以闪亮的方式显示已拆分为不同部分的数据?
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
您可以查看 uiOutput
和 renderUI
。这些允许您传递动态渲染对象或对象列表。您的 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 被最新的覆盖。
我创建了一个闪亮的应用程序,用户可以在其中输入一些数据,然后根据列将数据分成几组行,例如 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
您可以查看 uiOutput
和 renderUI
。这些允许您传递动态渲染对象或对象列表。您的 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 被最新的覆盖。