2016-03-30 35 views
-1

我生成了一系列我想在Shiny应用程序中生成动态数量的图时循环的图。在服务器功能我有以下结构的观察功能:通过闪亮的反应渲染函数中的列表循环的方法

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> 

} 

不幸的是,这并不能作为在列表中最后一个情节重复每个生成其相关plotOutput的对象,我想在一个单独的代码块中。我相信这种行为与这样一个事实有关,即renderPlot表达式不会被调用,直到用户点击一个选项卡并且i索引变量已被提前到其最终位置并且每次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> 

}