2013-08-18 60 views
18

我在Shiny UI中有一個陰謀。如果我改變任何輸入參數,並通過反應性情節會改變。但讓我們考慮以下情況: - Shiny UI繪圖中的陰謀讓我們說股票的日內價格走勢。併爲此您查詢一些實時數據源。現在,如果我創建一個刷新按鈕,然後如果時間流逝,我繼續點擊刷新按鈕。隨着時間流入實時數據源,圖表會隨着新數據的到來而更新。 現在我的問題是我不想繼續點擊刷新按鈕。但我想用定時器運行一個循環,以便它能檢查一段固定的時間間隔,一旦有新數據出現,繪圖將自動更新。某種Google財務圖表隨時間不斷更新。用固定的時間間隔更新圖形/繪圖

那麼如下的問題可以簡化爲: - 讓我們考慮從閃亮本身這個例子: - 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。 請幫我找出如何做到這一點。

+0

您可以使用'reactiveTimer'產生。請參閱'?reactiveTimer' – jdharrison

+0

我認爲您正在尋找'invalidateLater' – GSee

+1

是的都是invalidateLater和reactiveTimer服務於我的目的..唯一的事情是invalidateLater必須在反應環境內實現,而reactiveTimer要創建反應性源[只是重複澄清事實]。我是R Shiny新手,這就是爲什麼我花了很長時間。 – IndranilGayen

回答

23

正如你可以在本地運行下面的例子:

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秒

+0

非常感謝,這將是什麼工作。但我想它會刷新整個會話。但它能完成這項工作。我想我得到了我正在尋找的東西。 – IndranilGayen

+1

我有同樣的問題,這正是我需要的答案。謝謝! –