В R блестящий, как я могу использовать данные, которые я сгенерировал в наблюдаемом событии (нажатие кнопки) за пределами этого наблюдательного события? - PullRequest
1 голос
/ 01 апреля 2020

Скажем, я делаю наблюдающее событие, подобное этому, где я генерирую случайные числа, а затем другое, чтобы экспортировать эти числа в csv:

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

Это в основном то, что я пытаюсь сделать, но я генерирую числа более сложным способом, который я не хочу повторять для каждой кнопки из-за эффективности.

1 Ответ

1 голос
/ 01 апреля 2020

Вот рабочий пример. Я также показываю таблицу данных, которые создаются при обновлении numericInput. Это должно сохранить в вашем рабочем каталоге. Обратите внимание, что my_df генерируется с eventReactive, потому что это должно быть реактивное значение (оно должно измениться, когда мы изменяем numericInput), тогда как write.csv вызывается в пределах 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...