Shiny 需要两次失效的事件
有许多闪亮的应用程序示例,它们具有Shiny 需要两次失效的事件,shiny,reactive,Shiny,Reactive,有许多闪亮的应用程序示例,它们具有eventReactive,具有多个输入,当其中一个输入无效时响应。但是,我正在尝试创建一个带有eventReactive的应用程序,该应用程序仅在应用程序启动时运行,并且仅在Val1textInput更新且按下action按钮时运行。下面是我的应用程序的精简版本 我试过花括号、c()方法和!is.null(输入$Val)&!在事件部分中为.null(input$Run),但都没有成功(对于后者-因为我假设inputText在所有情况下都返回非null值,但我无
eventReactive
,具有多个输入,当其中一个输入无效时响应。但是,我正在尝试创建一个带有eventReactive
的应用程序,该应用程序仅在应用程序启动时运行,并且仅在Val1textInput
更新且按下action按钮时运行。下面是我的应用程序的精简版本
我试过花括号、c()
方法和!is.null(输入$Val)&!在事件部分中为.null(input$Run)
,但都没有成功(对于后者-因为我假设inputText
在所有情况下都返回非null值,但我无法计算它在无效时返回什么…)
非常感谢
library(shiny)
library(shinydashboard)
server <- function(input, output, session){
dat <- eventReactive(input$Val1, {
data.frame(x = input$Val1, y = 1)
}, ignoreNULL=FALSE)
output$table <- renderTable({
dat()
})}
sidebar <- dashboardSidebar(
textInput(inputId = "Val1", label = "Val1", value = "5"),
textInput(inputId = "Val2", label = "Val2", value = "51"),
actionButton("Run", "Run", class = "btn-success"))
ui <- dashboardPage(header = dashboardHeader(),
sidebar = sidebar,
body = dashboardBody(mainPanel(fluidRow(tableOutput("table")))))
shinyApp(ui, server)
库(闪亮)
图书馆(shinydashboard)
服务器这里有一个解决方案,它将Val1
的当前值与eventReactive
最后一次触发时Val1
的值进行比较。我不直接在eventReactive
中进行比较(并对其使用req
),因为在触发的情况下,Val1
没有改变,dat
不会显示任何内容(也会丢失最后显示的值)
库(闪亮)
图书馆(shinydashboard)
你到底想要什么?你知道吗。要仅在按下操作按钮时执行eventReactive
,而不考虑Val1
或2的状态。是否希望在按下操作按钮时执行eventReactive
,并且Val1
与之前执行的eventReactive
不同?或者别的什么?正如我在文章中提到的,我希望eventReactive
仅在Val1textInput
更新并且按下action按钮时执行。
library(shiny)
library(shinydashboard)
server <- function(input, output, session){
comparison_values <- reactiveValues(trigger_event = 0,
previous_input = "value_on_startup")
observeEvent(input$Run, {
if (input$Val1 != comparison_values$previous_input) {
comparison_values$trigger_event <- comparison_values$trigger_event + 1
comparison_values$previous_input <- input$Val1
}
})
dat <- eventReactive(comparison_values$trigger_event, {
data.frame(x = input$Val1, y = 1)
}, ignoreNULL=FALSE)
output$table <- renderTable({
dat()
})}
sidebar <- dashboardSidebar(
textInput(inputId = "Val1", label = "Val1", value = "5"),
textInput(inputId = "Val2", label = "Val2", value = "51"),
actionButton("Run", "Run", class = "btn-success"))
ui <- dashboardPage(header = dashboardHeader(),
sidebar = sidebar,
body = dashboardBody(mainPanel(fluidRow(tableOutput("table")))))
shinyApp(ui, server)