首页 > 解决方案 > 在 R Shiny 中,如何使用在该 observeEvent 之外的 observeEvent(按钮单击)中生成的数据?

问题描述

假设我做了一个像这样的observeEvent,我生成随机数,然后另一个将这些数字导出到csv:

  observeEvent(input$generateButton, {
    u = runif(input$nNumericInput)
  })
  observeEvent(input$exportButton, {
    write.csv(data.frame(u),"randomNumbers.csv", row.names = FALSE)
  })

这基本上就是我想要做的,但我正在以更复杂的方式生成数字,因为效率原因我不想为每个按钮重复。

标签: rshiny

解决方案


这是一个工作示例。我还显示了更新 numericInput 时生成的数据表。这应该保存在您的工作目录中。请注意,它my_df是用 an 生成的eventReactive,因为它应该是一个反应值(当我们更改 numericInput 时它应该改变),而write.csv在 an 中调用observeEvent它,因为它只是通过单击按钮触发(即,它没有创建任何反应对象)。希望有帮助。

library(shiny)

ui <- {
    fluidPage(
        fluidRow(
            numericInput(
                inputId = 'num_input',
                label = 'Input',
                value = 5),
            actionButton(
                inputId = 'num_input_button',
                label = 'Generate df'),
            actionButton(
                inputId = 'write_data',
                label = 'Write to csv')
        ),
        fluidRow(
            tableOutput('table')
        )
    )
}

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

    my_df <- eventReactive(input$num_input_button, {
        runif(input$num_input)
    })

    observeEvent(input$write_data, {
        write.csv(my_df(), 'random_numbers.csv')
    })

    output$table <- renderTable({
        my_df()
    })

}

shinyApp(ui, server)

推荐阅读