Объединить 2 выхода actionbuttons внутри одного и того же событияReactive () - PullRequest
1 голос
/ 22 апреля 2020

У меня есть блестящее приложение ниже, в котором у меня есть 2 ввода файла и 2 кнопки действия.

1-я кнопка отправки «submit» используется для запуска таблицы, а 2-я «reset» для сброса каждого ввода файла .

Когда 1-я кнопка действия пуста, я получаю предупреждение.

Какая таблица будет отображаться, зависит от условий if внутри log(). Проблема заключается в том, что при нажатии reset входные данные файла становятся пустыми, а таблица остается.

В идеале каждая таблица должна отображаться после нажатия кнопки submit и при нажатии reset при вводе файла. становятся пустыми, таблица исчезает и снова отображается предупреждение. Я думаю, что мне нужно что-то вроде комбинации из двух кнопок действия (input$submit,input$reset) внутри log().

library(shiny)
library(shinyjs)
library(tidyverse)
library(DT)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      useShinyjs(),
      fileInput('inFile', 'Choose 1st file'),
      fileInput('inFile2', 'Choose 2nd file'),
      actionButton('submit', 'Submit'),
      tags$hr(),
      actionButton('reset', 'Reset')
    ),
    mainPanel(

      uiOutput("choose"),
      DTOutput( "choose2" )
    )
  )
)

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

  rv <- reactiveValues(
    data = NULL,
    clear = FALSE
  )
  rv2 <- reactiveValues(
    data = NULL,
    clear = FALSE
  )

  ########1st
  observe({
    req(input$inFile)
    req(!rv$clear)

    rv$data <- read.csv(input$inFile$datapath,header = T)



  })

  observeEvent(input$inFile, {
    rv$clear <- FALSE
  }, priority = 1000)

  observeEvent(input$reset, {
    rv$data <- NULL
    rv$clear <- TRUE
    reset('inFile')
  }, priority = 1000)


  #############2nd
  observe({
    req(input$inFile2)
    req(!rv2$clear)

    rv2$data <- read.csv(input$inFile2$datapath,header = T)



  })

  observeEvent(input$inFile2, {
    rv2$clear <- FALSE
  }, priority = 1000)

  observeEvent(input$reset, {
    rv2$data <- NULL
    rv2$clear <- TRUE
    reset('inFile2')
  }, priority = 1000)




  output$choose <- renderUI ({
    if(is.null(rv$data))
    {
      "You must upload 1st csv at least"
    }
    else
    {
      return(NULL)

    }
  })
  log<-eventReactive({input$submit }, {
    if(is.null(rv$data)){
      return(NULL)
    }
    if(!is.null(isolate(rv$data))){

      if(!is.null(isolate(rv2$data))){
        datatable(input$inFile2$datapath)
      }
      else if(is.null(isolate(rv2$data))){
        datatable(input$inFile$datapath)
      }
    }
  })

  output$choose2<-renderDataTable({

    log()
  })
}

shinyApp(ui, server)

1 Ответ

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

Вы можете добавить несколько действий в eventReactive (), поместив их в вектор.

eventReactive(
  c(action1, action2),{

  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...