使用闪亮的 R 使用 split() 函数动态显示 n 个表(问题已解决,谢谢)

Display n number of tables dynamically using split() function using shiny R(QUESTION HAS BEEN SOLVED THANK YOU)

我制作了一个应用程序,用户在其中上传数据,然后根据列拆分该数据。例如,假设我正在对 Iris 数据集进行拆分。我可能会使用 split(iris, iris$Species)。这将给我 3 个数据集(见下文)。现在我希望这三个数据集在三个 table 中动态显示。

由于用户每次上传的数据不同,所以拆分的table个数也会不同。 Iris 给出了 3 个数据集,但我们可以根据数据得到任意数量的 table。现在我想显示这 3 个数据集以动态显示在 3 tables 中。如果我有 4 个数据集,因为 split(),那么 4 tables 应该动态显示。

我尝试编写一些代码,但它给了我相同的 table 3 次。它没有给我 3 个不同的 tables.

$setosa
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa
5           5.0         3.6          1.4         0.2  setosa


$versicolor
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
51           7.0         3.2          4.7         1.4 versicolor
52           6.4         3.2          4.5         1.5 versicolor
53           6.9         3.1          4.9         1.5 versicolor
54           5.5         2.3          4.0         1.3 versicolor
55           6.5         2.8          4.6         1.5 versicolor
56           5.7         2.8          4.5         1.3 versicolor



$virginica
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
101          6.3         3.3          6.0         2.5 virginica
102          5.8         2.7          5.1         1.9 virginica
103          7.1         3.0          5.9         2.1 virginica
104          6.3         2.9          5.6         1.8 virginica
105          6.5         3.0          5.8         2.2 virginica
106          7.6         3.0          6.6         2.1 virginica

我通过创建一个拆分数据集的反应式表达式稍微更改了代码,这并不是真正需要的(仅使用 iris 数据集),但在添加用户输入时它会派上用场。

library(shiny)
library(tidyverse)
data(iris)



server <- function(input, output, session) {
    #instead  of iris$Species an input$... can be passed
    Splitdfs <- reactive({split(iris, iris$Species)}) 
    
    output$data <- renderUI({
        
        tables <- map(Splitdfs() , ~{
            renderDataTable({.x})
        })
        mainPanel(tables)
        
    })
    
}



ui <- fluidPage(
    titlePanel(title = h4("Iris Dataset", align="center")),
    sidebarLayout(
        sidebarPanel(),   
        uiOutput("data") #the ui will contain all the split tables.
    ))

#run the app
shinyApp(ui, server)

reprex package (v2.0.0)

于 2021-05-31 创建