2017-08-02 5 views
1

値を計算して提示し、さらに高価な計算に同じ値を使用するShinyアプリケーションがあります。問題は、スクリプト全体の評価が終了した後にのみ出力が表示されることです。ここに簡単な例があります:残りのスクリプトが実行されるのを待つことなく出力を表示する方法Shiny

library(shiny) 
ui <- fluidPage(
    titlePanel("test"), 
    sidebarLayout(
    sidebarPanel(
     textInput("text_in","Enter text here",value = "This is text to process"), 
     actionButton("go", "Go") 
    ), 

    mainPanel(
     textOutput("first_text"), 
     textOutput("results") 
    ) 
) 
) 

# Define server logic 
server <- function(input, output) { 

num_letter<-eventReactive(input$go, { 
    nchar(input$text_in)}) 
output$first_text <- renderText(num_letter()) 

sec_calculation<-eventReactive(num_letter(), { 
    Sys.sleep(3) 
    num_letter()*num_letter()}) 
output$first_text <- renderText(num_letter()) 
output$results <- renderText(sec_calculation()) 


} 
    # Run the application 
    shinyApp(ui = ui, server = server) 

私はSys.sleepを追加したので、問題が分かりやすくなりました。私は第2のものを待つことなく最初の出力を得たいと思っています。

+0

簡単な解決策は、アクションボタンで高価な計算をトリガーすることです。 – Jimbou

+0

ありがとう、私は別のアクションボタンが含まれていないソリューションを探しています、私はユーザーが一度だけクリックしたい – Nooga

答えて

1

これは現時点では可能ではありません(少なくともネイティブの光沢のあるコードではありませんが、回避策は常にハックすることができます)。この問題は、光沢のあるgithubリポジトリに存在します。https://github.com/rstudio/shiny/issues/1705

+0

あなたの答えをありがとう。私は誤って別の回避策を見つけました。 'tabsetPanel()'を使って、より高価な計算を別の 'tabPanel()'に置くと、実際にはすぐに表示されます...もし同じページに両方を持たなければならない場合は、 – Nooga

+0

yesこれは、shinyが計算を最適化しようとしているためにうまくいきます。ユーザーに現在表示されている出力のみを更新します( 'outputOptions'で変更できますが、これは別の話です) –

関連する問題