Shiny 需要两次失效的事件

Shiny 需要两次失效的事件,shiny,reactive,Shiny,Reactive,有许多闪亮的应用程序示例,它们具有eventReactive,具有多个输入,当其中一个输入无效时响应。但是,我正在尝试创建一个带有eventReactive的应用程序,该应用程序仅在应用程序启动时运行,并且仅在Val1textInput更新且按下action按钮时运行。下面是我的应用程序的精简版本 我试过花括号、c()方法和!is.null(输入$Val)&!在事件部分中为.null(input$Run),但都没有成功(对于后者-因为我假设inputText在所有情况下都返回非null值,但我无

有许多闪亮的应用程序示例,它们具有
eventReactive
,具有多个输入,当其中一个输入无效时响应。但是,我正在尝试创建一个带有
eventReactive
的应用程序,该应用程序仅在应用程序启动时运行,并且仅在Val1
textInput
更新且按下
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
仅在Val1
textInput
更新并且按下
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)