2017-08-08 15 views
1

私は光沢のあるアプリに多数のプロットを動的に挿入しようとしています。私はこれを、たとえ異なっていなくても同じ数のビン(48)で3つのヒストグラムを表示する単純な例に縮小しました(16,32,48)。おそらく私は何か本当に愚かなやりました、または何かもっと微妙な行方不明です!コードが添付されています。どんなsuggetionsにも事前に感謝します。シャイニーダイナミックUIの複数のプロット

shinyUI(fluidPage(tagList(
      actionButton("button_id", "Show plot"), 
      uiOutput("plot_id"), 
      HTML("<div id=\"end\">The end</div>")))) 

shinyServer(function(input, output) { 

    # A list to hold the plot IDs 
ls <- list() 

observeEvent(input$button_id, 
{ 
    x <- faithful[, 2] 

    for (i in 1:3) 
    { 
      # generate bins based on input$bins from ui.R 
     count <- i * 16 
     bins <- seq(min(x), max(x), length.out = count) 

     ls[[i]] <<- paste0("plot_", i) 

     output[[ls[[i]]]] <- renderPlot(hist(x, breaks = bins, col = 'darkgray', border = 'white')) 
    } 
    output$plot_id <- renderUI({ 


     wellPanel(do.call(tagList, lapply(ls, function(x) 
     { 
      plotOutput(x) 
     }))) 

    }) 

}) 

}) 
+0

は私をしましたソリューションの仕事ですか? – AEF

答えて

0

ここで問題を引き起こすのは遅延評価です。ヒストグラムのコードはすぐには実行されませんが、プロットがレンダリングされるときにのみ実行されます。これはfor -loopが完了したとiは、インスタント評価を強制するためには、あなたがこのようなlocal環境の中で、あなたのループの本体をラップすることができます値3

を持っていた後:

for (i in 1:3) { 
    local({ 
    # generate bins based on input$bins from ui.R 
    count <- i * 16 
    bins <- seq(min(x), max(x), length.out = count) 

    ls[[i]] <<- paste0("plot_", i) 
    output[[ls[[i]]]] <- renderPlot(hist(x, breaks = bins, col = 'darkgray', border = 'white')) 
    }) 
} 
+0

ありがとうございます - うまくいきました! – jxf

関連する問題