Обновить график/график с фиксированным интервалом времени
У меня есть сюжет в Shiny UI. Если я изменю какой-либо входной параметр и по графику реактивности изменится. Но рассмотрим следующую ситуацию: -
Сюжет в графике Shiny UI позволяет говорить о внутридневном ценовом движении акций. И для этого вы запрашиваете источник данных в реальном времени. Теперь, если я создаю кнопку обновления, а затем, если время пройдет, я продолжаю нажимать кнопку обновления. Сюжет будет обновляться по мере поступления новых данных по мере того, как время идет в этот живой источник данных.
Теперь мой вопрос: я не хочу, чтобы нажимать на кнопку обновления. Но я хочу запустить цикл с таймером, чтобы он проверял фиксированный интервал времени, и как только появятся новые данные, сюжет будет автоматически обновляться. Что-то вроде Google Finance Graphs, который постоянно обновляется.
Таким образом, проблему можно упростить следующим образом:
Рассмотрим этот пример из самого Блестящего:
ui.R
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Hello Shiny!"),
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
),
mainPanel(
plotOutput("distPlot")
)
))
и server.R
library(shiny)
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
# generate an rnorm distribution and plot it
dist <- rnorm(input$obs)
hist(dist)
})
})
Теперь я хочу сгенерировать другую случайную выборку из обычного распределения без какой-либо входной активности. Поэтому в основном я хочу позвонить
dist <- rnorm(input$obs)
hist(dist)
снова без изменения значения sliderInput.
Пожалуйста, помогите мне узнать, как это сделать.
Ответы
Ответ 1
В качестве примера вы можете выполнить следующее локально:
library(shiny)
runApp(list(
ui = pageWithSidebar(
headerPanel("Hello Shiny!"),
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
),
mainPanel(
plotOutput("distPlot")
)
),
server =function(input, output, session) {
autoInvalidate <- reactiveTimer(5000, session)
output$distPlot <- renderPlot({
autoInvalidate()
# generate an rnorm distribution and plot it
dist <- rnorm(input$obs)
hist(dist)
})
}
))
Каждый нормальный образец будет генерироваться каждые 5 секунд