Подмножество реактивных данных выбирают с помощью выбора входных данных, которые поступают из реактивного кадра данных

Я новичок в блестящем, и я хотел бы задать (теоретический?) Вопрос, который, вероятно, не так, но в любом случае, после поиска я хотел бы знать.

Можете ли вы установить подкадр реактивных данных, используя значения selectinput() что было создано на основе этого фрейма данных? Мне кажется парадоксом, потому что каждый раз, когда фрейм данных обновляется, selectinput() тоже обновляется. Я приведу небольшой пример своей мысли, который может помочь кому-то понять. Вероятно, то, что я спрашиваю, наивно, но я хотел бы знать.

 location = c("100 ail","16th and Whitmore","40AB01 - ANTWERPEN","Abington") 
last = c("2018-02-01 09:30:00", "2018-02-01 03:00:00", "2017-03-07 10:00:00","2018-02-01 03:00:00") 
first = c("2015-09-01 00:00:00","2016-03-06 19:00:00","2016-11-22 15:00:00","2016-06-09 19:00:00") 
locations = data.frame(location, last, first)

library(shiny)
library(shinythemes)
library(htmltools)
library(DT)
library(utilr)
library(openair)
library(dplyr)
library(ropenaq)
library(worldmet)

  ui = fluidPage(theme = shinytheme("slate"),

  # title
  titlePanel("Select Dates of interest and location"),

  # first row; This allows a user to enter their start and stop dates
  fluidRow(
    column(3, wellPanel(

    )
    ),
    column(3, wellPanel(

    )
    ),
      column(
          width = 6

      )
  ),



  fluidRow(
      tabsetPanel(
          type = "tabs",
          # summary tab
          tabPanel(
              "  Select Dates and Location",
              uiOutput("loc"),
              uiOutput("dt"),
              shiny::dataTableOutput("merged")         

          ),                      

          # scenario tab.  Needs work.  Panel should include a summary of user choices (selected on previous panels) and then 
          # allow a user to enter their email address.  An action button would be pressed to create the output from OpenAir.
          tabPanel(
              "Selection Summary and Process Data",
              fluidRow(
                  # actionButton("goButton", "OpenAir Local!"),
                  # helpText("When you click the button above, you should see",
                  #          "the output below update to reflect the value you",
                  #          "entered at the top:"),

                  )


                  )
              )
          )
      )

#server.r
server = function(input, output, session) {
 #initial selectinput to create the initial dataframe
output$loc<-renderUI({
     selectInput("loc", label = h4("Choose location"),
                 choices = locations$location ,selected = 1
     )
   })

    rt<-reactive({
#dataframe creation
    AQ<- aq_measurements(location = input$loc) 
    )
    met <- importNOAA(year = 2014:2018)
    colnames(AQ)[9] <- "date"
    merged<-merge(AQ, met, by="date")

    merged$location <- gsub( " " , "+" , merged$location)
    merged


   })

#selectinput based on the dataframe
output$dt<-renderUI({
     selectInput("dt", label = h4("Choose Dates"), 
                 choices = as.character(rt()[,1]),
                 selected = 1,
                 multiple = T)
   })


#attempt to create a datatable by subseting the dataframe by the choices of selectinput   
   output$merged <- shiny::renderDataTable({
     a <- subset(rt(), rt()[,1] %in% input$dt)
   })
}
shinyApp(ui, server)

1 ответ

Решение

Проблема была в другом. Блестящий не мог прочитать пространство между датой и временем, поэтому я заменил его на "+".

 output$loc<-renderUI({
     selectInput("loc", label = h4("Choose location"),
                 choices = locations$location ,selected = 1
     )
   })

   rt<-reactive({
     locations$location <- gsub( " " , "+" , locations$location)

   AQ<- aq_measurements(location = input$loc,date_from = as.Date(as.POSIXct(subset(locations$firstUpdated,(locations[,1]==input$loc))
   ,format="%Y-%m-%d %H:%M:%S")) 
   , date_to = as.Date(as.POSIXct(subset(locations$lastUpdated,(locations[,1]==input$loc)),format="%Y-%m-%d %H:%M:%S")) 
   )
   met <- importNOAA(year = 2014:2018)
   colnames(AQ)[9] <- "date"
   merged<-merge(AQ, met, by="date")
   # date output -- reports user-selected state & stop dates in UI
   merged$location <- gsub( " " , "+" , merged$location)
   merged$date <- gsub( " " , "+" , merged$date)
   merged


   })

   output$dt<-renderUI({
     selectInput("dt", label = h4("Choose Dates"), 
                 choices = as.character(rt()[,1]),
                 selected = 1
                 )
   })

   #DT  

   output$merged <- shiny::renderDataTable({


     subset(rt(),(rt()[,1]==input$dt))


   })
Другие вопросы по тегам