Я разработал небольшое блестящее приложение:
Приложение
Приложение отображает дождь для станций, которые выбраны в selectizeInput.
Данные отправляются на внешний сервер каждый раз, когда станция добавляется или удаляется.
В данный момент он получает данные с внешнего сервера для всех станций независимо от того, остаются они в списке или нет. Это добавляет время и вычисления, которые не нужны.
У меня вопрос, как мне уменьшить необходимость получения данных, которые уже присутствуют?
потому что я не могу представить реальное приложение, я создал воспроизводимое приложение, чтобы проиллюстрировать мой поток кода:
#data
id <- as.numeric(1:26)
names(id) <- letters
#dataframe function
get.rain.data <- function(id){
print(id)
vec <- 1:100
id <- as.numeric(id)
print(id)
df <- do.call(rbind,lapply(id,function(i)
tibble(x=vec,y=vec*i+vec^2*i,
id=as.factor(rep(i,length(vec))))))
return(df)
}
#plot function
plot.rain <- function(df){
print(df)
p <- ggplot(df,aes(x=x,y=y,group=id))+
geom_line(aes(color=id),size=0.6)
ggplotly(p,height=700)
}
#### UI
ui <- fluidPage(
titlePanel(h1("Rain Intensities and Cumulative Rain")),
sidebarLayout(
sidebarPanel(
helpText("Check rain with info from
IMS.gov.il"),
selectizeInput("var", h3("Select station"),
choices = id,
multiple = T,
selected = 4)
),
mainPanel(
plotlyOutput("rain")
)
)
)
# Define server logic ----
server <- function(input, output) {
dataInput <- reactive({
get.rain.data(input$var)
})
output$rain <- renderPlotly({
req(input$var)
plot.rain(dataInput())
})
}
# Run the application
shinyApp(ui = ui, server = server)