r - 使用闪亮的 R 使用 split() 函数动态显示 n 个表(问题已解决,谢谢)
问题描述
我制作了一个应用程序,用户在其中上传数据,然后根据列将这些数据拆分()。例如,假设我正在对 Iris 数据集进行拆分。我可能会使用 split(iris, iris$Species)。这会给我 3 个数据集(见下文)。现在我希望这三个数据集在三个表中动态显示。
因为用户每次上传的数据会不一样,所以拆分会给出不同的表数。Iris 提供了 3 个数据集,但我们可以根据数据获得任意数量的表。现在我想显示这 3 个数据集,以动态显示在 3 个表中。如果由于 split() 我有 4 个数据集,那么应该动态显示 4 个表。
我试图编写一些代码,但它给了我同一张桌子 3 次。它没有给我 3 张不同的桌子。
$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 包于 2021-05-31 创建 (v2.0.0 )
推荐阅读
- bootstrap-4 - 覆盖 ActiveForm Yii2 的 Bootstrap CSS/JS
- ios - 处于“等待开发者发布”状态的 iOS 版本过期
- ruby-on-rails - 在视图中呈现结果不正确的 ActiveRecord
- python - 使用 Pandas DataFrame 从一个数据帧中获取唯一值及其出现到一个新数据帧中
- r - 如何使用“如何”功能进行不平衡的重复设计
- c++ - 我的程序在到达 `cin.getline()` 函数时突然退出
- rspec - Chefspec:覆盖属性不起作用
- javascript - 工作箱。为什么我的缓存存储是空的?我做错了什么?
- jquery - 计算克隆后每个表单行的总和
- javascript - 如何让我的 javascript 动画更快?