r-RShiny应用程序-呈现数据表条件



此反应函数的目标是在RShiny应用程序的初始测试期间显示原始starwars数据集(可从dplyr库获得(。

在当前场景中,用户必须首先点击Run Query才能弹出数据,然后才能进入过滤器,进行相应的过滤,再次点击Run Query才能显示结果。

理想的目标是最终用户首先弹出数据,然后用户可以选择他们想要的过滤器,然后点击Run Query以相应地显示结果。

如有任何帮助,我们将不胜感激!谢谢

library(DT)
library(shiny)
library(shinydashboard)
library(dplyr)
library(dbplyr)
library(tidyverse)
library(DBI)
ui <- function(request) {
dashboardPage(
dashboardHeader(title = "SW Pivot"),
dashboardSidebar(
actionButton("runit", "RUN QUERY"),
hr(),
h4(HTML("&nbsp"), "Filter Data Set"),

uiOutput("hairColorFilter"),
uiOutput("skinColorFilter")
),
dashboardBody(dataTableOutput("data"))

)
}
data <- starwars
server<-shinyServer(function(input, output, session) {

# Identify Filter Choices -----------------------------------------------

hairColorChoices <- sort(unique(data$hair_color))
skinColorChoices <- sort(unique(data$skin_color))

# Define User Inputs ----------------------------------------------------

output$hairColorFilter <- renderUI({
sidebarMenu(
menuItem(
text = "Hair Color",
icon = icon("briefcase"),
checkboxGroupInput(
inputId = "hairColorChoices",
label = NULL,
choices = hairColorChoices,
selected = hairColorChoices
)
)
)
})

output$skinColorFilter <- renderUI({
sidebarMenu(
menuItem(
text = "Skin Color",
icon = icon("thermometer-half"),
checkboxGroupInput(
inputId = "skinColorChoices",
label = NULL,
choices = skinColorChoices,
selected = skinColorChoices
)
)
)
})

# Table Data --------------------------------------------------------------

filterData <- reactive({
input$runit
isolate({
filterData <- data %>%
filter(
hair_color %in% input$hairColorChoices,
skin_color %in% input$skinColorChoices
)
})
})

output$data <- renderDataTable({
filterData()

})
})
shinyApp(ui, server)

实现这一点的一种方法是创建一个可以在开头显示的reactiveValues对象。然后eventReactive可以创建过滤后的数据。试试这个

server<-shinyServer(function(input, output, session) {

DF1 <- reactiveValues(data=NULL)
# Identify Filter Choices -----------------------------------------------

hairColorChoices <- sort(unique(data$hair_color))
skinColorChoices <- sort(unique(data$skin_color))

# Define User Inputs ----------------------------------------------------

output$hairColorFilter <- renderUI({
sidebarMenu(
menuItem(
text = "Hair Color",
icon = icon("briefcase"),
checkboxGroupInput(
inputId = "hairColorChoices",
label = NULL,
choices = hairColorChoices,
selected = hairColorChoices
)
)
)
})

output$skinColorFilter <- renderUI({
sidebarMenu(
menuItem(
text = "Skin Color",
icon = icon("thermometer-half"),
checkboxGroupInput(
inputId = "skinColorChoices",
label = NULL,
choices = skinColorChoices,
selected = skinColorChoices
)
)
)
})

# Table Data --------------------------------------------------------------

filterData <- eventReactive(input$runit, {

isolate({
filterData <- data %>%
filter(
hair_color %in% input$hairColorChoices,
skin_color %in% input$skinColorChoices
)
})
})

observe({
DF1$data <- starwars
if (!is.null(filterData())) DF1$data <- filterData()
})

output$data <- renderDataTable({
DF1$data
})
})
shinyApp(ui, server)

我会用这个来代替# Table Data。不要忘记关闭server之后的最后一个})。在我闪亮的应用程序中,我使用observeEvent进行这种类型的操作。翻译成文字。。。当我按下runit按钮时,我想使用我的input筛选data,然后将该数据馈送到DT输出。

observeEvent(input$runit, {

filterData <- data %>%
filter(
hair_color %in% isolate(input$hairColorChoices),
skin_color %in% isolate(input$skinColorChoices)
)

output$data <- renderDataTable({
DT::datatable(filterData)
})
})

最新更新