Использование «if» с «eventReactive» в блестящем - PullRequest
1 голос
/ 24 сентября 2019

Я очень плохо знаком с Shiny и пытаюсь создать приложение, которое получает данные с помощью веб-службы.Прочитав о «реактивности» в Shiny, я подумал, что «eventReactive» - лучший путь.Это работало до тех пор, пока не было никакого выражения «если», но как только я использовал выражение «если», оно перестало работать.Ниже приведен упрощенный пример того, что я пытаюсь сделать -

    library(shiny)


ui <- fluidPage(

   # Application title
   titlePanel("Get Data"),


   sidebarLayout(
      sidebarPanel(
        textInput("stationID", "Station ID(s)", value = ""), 
        radioButtons("DownloadType", "Download",
                     choices = c("Yes","No"),
                     selected = "No"),



        br(),
        radioButtons("DataType", "Data Availability",
                     choices = c("All","Selected"),
                     selected = "All"),
        actionButton("goButton","Go!")

      ),


      mainPanel(
        (tableOutput("results"))
      )
   ))


# Define server logic required to draw a histogram
server <- function(input, output) {
  data<-eventReactive(input$goButton, {
  if(input$DataType == "All" && input$DownloadType=="No"){
    employee <- c('X','Y','Z')
    salary <- c(100, 200, 300)
    df1<-data.frame(employee, salary)
    df1
  }

    if(input$DataType =="Selected" && input$DownloadType=="No"){
      employee <- c('A','B','C')
      salary <- c(100, 200, 300)
      df1<-data.frame(employee, salary) 

      employee2<-c('A','B','C')
      salary2 <- c(500, 600, 700)
      df2<-data.frame(employee2, salary2) 

      my_df<-merge(df1,df2,by.x="employee",by.y="employee2")
      my_df
    }
  })

  output$results<-renderTable({
    data()
  })
}

# Run the application 
shinyApp(ui = ui, server = server)

Может ли кто-нибудь указать мне правильное направление?Когда первый оператор «if» верен, таблица не отображается.Однако, когда второе утверждение «если» верно, оно работает.Идея состоит в том, чтобы нажать кнопку «Перейти» в приложении, чтобы отобразить таблицу на основе комбинации входных данных.Заранее благодарю за любую помощь.

1 Ответ

1 голос
/ 25 сентября 2019

Как предложил @ Sada93, добавив return для явного возврата значений.

server <- function(input, output) {
    data<-eventReactive(input$goButton, {
        if(input$DataType == "All" && input$DownloadType=="No"){
            employee <- c('X','Y','Z')
            salary <- c(100, 200, 300)
            df1<-data.frame(employee, salary)
            return(df1) # add return
        }

        if(input$DataType =="Selected" && input$DownloadType=="No"){
            employee <- c('A','B','C')
            salary <- c(100, 200, 300)
            df1<-data.frame(employee, salary) 

            employee2<-c('A','B','C')
            salary2 <- c(500, 600, 700)
            df2<-data.frame(employee2, salary2) 

            my_df<-merge(df1,df2,by.x="employee",by.y="employee2")
            return(my_df) # add return
        }
    })

    output$results<-renderTable({
        data()
    })
}
...