在 Shiny 上设置“重置值”按钮
Posted
技术标签:
【中文标题】在 Shiny 上设置“重置值”按钮【英文标题】:Setting a "Reset Values" button on Shiny 【发布时间】:2020-04-17 15:55:34 【问题描述】:我已经组装了一个 Shiny 应用程序,它可以反应性地创建列表,同时从您选择的列表中删除这些选择。我正在尝试整合一个功能,您可以在其中单击重置按钮并执行以下操作:
1.) 取消选择所有输入选项
2.) 将年龄范围设置为 18 - 104(因此它会捕获所有值)
3.) 将另外两个滑块移动到零
我正在尝试使用shinyjs::reset
函数,但它似乎不起作用。看看:
df <- read.csv('https://raw.githubusercontent.com/gooponyagrinch/sample_data/master/datasheet.csv')
library(shiny)
library(shinyWidgets)
library(shinyjs)
library(tidyverse)
library(DT)
ui <- fluidPage(
div(id = "myapp",
fluidRow(
column("",
width = 10, offset = 1,
tags$h3("Select Area"),
panel(
sliderInput("current", "Current Score",
min = 0, max = 100, value = 20),
sliderInput("projected", "Projected Score",
min = 0, max = 100, value = 20),
sliderInput("age", "Age",
min = 18, max = max(df$age), value = c(18,24)),
checkboxGroupInput("ethnicity",label = "Ethnicity",
choices = list("Caucasian"="Caucasian",
"African-American"="African-American",
"Hispanic"="Hispanic",
"Other"="Other")),
checkboxInput('previous', label = "Previous Sale"),
checkboxInput('warm', label = "Warm Lead"),
actionButton("button", "Add to List"),
actionButton("reset", "Reset form")),
textOutput("counter"),
tags$h2("Data to filter"),
DT::dataTableOutput("table"),
tags$h2("IDs added to list"),
DT::dataTableOutput("addedToList")
)
)
)
)
server <- function(input, output, session)
filterData = reactiveVal(df %>% mutate(key = 1:nrow(df)))
addedToList = reactiveVal(data.frame())
filtered_df <- reactive(
res <- filterData() %>% filter(current_grade >= input$current)
res <- res %>% filter(projected_grade >= input$projected)
res <- res %>% filter(age >= input$age[1] & age <= input$age[2])
res <- res %>% filter(ethnicity %in% input$ethnicity | is.null(input$ethnicity))
if(input$previous == TRUE)
res <- res %>% filter(previous_sale == 1)
if(input$warm == TRUE)
res <- res %>% filter(warm_lead == 1)
res
)
output$counter <- renderText(
res <- filtered_df() %>% select(customer_id) %>% n_distinct()
res
)
output$table <- renderDataTable(
res <- filtered_df() %>% distinct(customer_id)
res
)
observeEvent(input$button,
addedToList(rbind(addedToList(),
filterData() %>% filter(key %in% filtered_df()$key) %>%
select(customer_id) %>% distinct() ))
filterData(filterData() %>% filter(!key %in% filtered_df()$key))
)
observeEvent(input$reset,
shinyjs::reset("myapp")
)
output$addedToList <- renderDataTable(
addedToList()
)
shinyApp(ui,server)
我错过了什么吗?
【问题讨论】:
【参考方案1】:您需要做的就是确保您的应用程序正在侦听您的应用程序中对“ShinyJS”的调用。在 UI 中,添加 useShinyJS() 调用!
ui <- fluidPage(
useShinyJS()
div(id = "myapp",
fluidRow(...)
)
我还应该注意,这看起来像是对这个问题的重复。 'Reset inputs' button in shiny app
【讨论】:
以上是关于在 Shiny 上设置“重置值”按钮的主要内容,如果未能解决你的问题,请参考以下文章
在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?