Подмножество реактивных данных выбирают с помощью выбора входных данных, которые поступают из реактивного кадра данных
Я новичок в блестящем, и я хотел бы задать (теоретический?) Вопрос, который, вероятно, не так, но в любом случае, после поиска я хотел бы знать.
Можете ли вы установить подкадр реактивных данных, используя значения 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))
})