2016-03-30 18 views
-1

Shinyアプリケーションで動的なプロット数を生成するときにループしたい一連のプロットを生成しました。サーバ機能では、私は次のような構造と機能を観察している:リストの最後のプロットが生成された相関plotOutputオブジェクトごとに繰り返されるように私が望むよう光沢のある反応的なレンダリング関数でリストをループする方法

server = function(input, output, session) { 

    <Lots of other code> 

    plotlist = generate_list_of_plots() 
    for(i in seq_len(length(plot list))) { 
     plotname = sprintf('ui_plot_%i', i) 
     output[[plotname]] = renderPlot(plotlist[[i]]) 
    } 

    <Lots of other code> 

} 

残念ながら、これは機能しません。コードの別のブロックで。この動作は、ユーザーがタブをクリックしたときにプロットが表示され、iインデックス変数が最終位置に進められ、renderPlot関数が実行されるたびに静的になるまで、renderPlot式が呼び出されないという事実と関係していると思います実行されたので、私は同じプロットを得る。

1:これが問題の真の原因ですか? 2:そうであれば、このような状況を処理する正しい方法は何ですか?

答えて

0

問題の解決策を見つけることができたかのようです。私は私の前提に正しかったと回答はlocal関数です。解決策はthisポストに見つかりました。

修正コードは、次のようになります。

server = function(input, output, session) { 

    <Lots of other code> 

    plotlist = generate_list_of_plots() 
    for(i in seq_len(length(plot list))) { 
     local({ 
      my_i = i 
      plotname = sprintf('ui_plot_%i', my_i) 
      output[[plotname]] = renderPlot(plotlist[[my_i]]) 
     }) 
    } 

    <Lots of other code> 

} 
関連する問題