【问题标题】:In R/Shiny, how do I trigger an Observe Event using an action button?在 R/Shiny 中,如何使用操作按钮触发观察事件?
【发布时间】:2021-08-16 23:34:45
【问题描述】:

这是我上一篇文章“在R/Shiny中,如何使用Action Button触发Observe Event功能?”的简化版本。

下面的代码在 Reactive 的基础上输出用户输入图,因此用户可以查看他的输入构建。情节需要保持反应性(不链接到动作按钮的点击)。下面代码中的观察事件从这些输入中创建了一个 R 对象(称为“matrix_inputs.R”),用于此处未显示的另一个 R 函数。我想让用户将输入数据保存到 R 对象中(触发观察事件)仅在用户单击操作按钮时。然后,用户可以继续将更多数据输入到输入矩阵中,并在不改变 R 对象的情况下,在反应的基础上观察绘图变化。如果用户在进行这些进一步更改后再次单击操作按钮,则更新的数据将被保存并覆盖在 Observe Event 中创建的同一个 R 对象。

我知道我应该在观察事件中插入“input$go, {...}”。它不在下面的代码中,因为如果我插入它,应用程序将无法工作,它会立即崩溃。我尝试了各种迭代,但都没有运气。有人对如何使这项工作有任何见解吗?保持情节完全实时反应,同时将观察事件链接到操作按钮。

代码如下:

library(shiny)
library(shinyMatrix)

m <- matrix(c(1,1), 1, 2, dimnames = list(NULL, c("Y", "Z"))) 

ui <- fluidPage(   
  
  titlePanel("Vector Generator"),   
  
  sidebarPanel(
    width = 6,     
    tags$h5(strong("Matrix inputs:")),     
    matrixInput("matrix_input",
                value = m,
                rows = list(extend = TRUE, names = TRUE, editableNames = TRUE),
                cols = list(extend = FALSE, names = TRUE, editableNames = FALSE),
                class = "numeric")
  ), # closes sidebarPanel
  
  actionButton(inputId = "go",label = "Save data"),
  
  mainPanel(
    
    h5(strong("Plot of matrix inputs:")),
    width = 6,plotOutput("graph"),
    
    h5(strong("Table of matrix inputs:")),
    tableOutput("view"),
  
  ) # closes main panel
)   # closes user input (UI) section

server <- function(input, output, session) {   
  
  matrix_input <- reactive(input$matrix_input)

  # Captures input data for further processing in R ----
  observeEvent(matrix_input(), {matrix_input.R <<- unique(matrix_input())})
  
  output$graph <- renderPlot({     
    plot(matrix_input(),type="b")
  }) 
  
  output$view <- renderTable({
    matrix_input()
  })
  
} # closes user server section

shinyApp(ui, server)

【问题讨论】:

    标签: r shiny shiny-reactivity


    【解决方案1】:

    假设我对您的理解是正确的,并且您想在用户按下“Go”时渲染绘图,我会在您的服务器上尝试这个:

    
    server <- function(input, output, session) {   
      
      matrix_input <- reactive(input$matrix_input)
    
      # Captures input data for further processing in R ----
      
      observeEvent(input$go, {
       matrix_input.R <<- unique(matrix_input)
      }
    
      output$graph <- renderPlot({     
        plot(matrix_input(),type="b")
      }) 
      
      output$view <- renderTable({
        matrix_input()
      })
    } # closes user server section
    

    当用户按下“go”而不是之前应该运行绘图

    【讨论】:

    • 我想保持绘图和表格输出完全反应,立即反映用户输入的输入。我上面发布的代码就是这样做的。我希望 Action Button 触发 observeEvent,根据我的代码(除了导致应用程序崩溃的 input$go 之外),它会生成一个名为 matrix_input.R 的 R 对象,在用户准备好时保存输入数据。
    • 我的意思是“(除了不包括输入$go...)”
    • 哦,好的,我会编辑的。你只需要在观察事件中包装矩阵的东西
    • 不过我还有一些其他问题:为什么要让 matrix_input.R 全球化?
    • matrix_input.R 将在 Shiny 之外的另一个 App 和其他 R 程序中使用。
    猜你喜欢
    • 2016-12-11
    • 2021-11-28
    • 2019-10-18
    • 2020-07-01
    • 2020-05-27
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多