2013-12-10 2 views
8

Возможно ли, что некоторые части приложения RShiny выполняются с задержкой так же, как запуск с задержкой в ​​службах Windows?Отложенное исполнение в приложении R Shiny

Позвольте мне уточнить.

У меня есть блестящее приложение с вкладками. На каждой вкладке есть группа переключателей на боковой панелиPanel. При нажатии на каждый переключатель появляется отчет. Моя настройка проста.

Однако, когда я загружаю приложение каждый раз и когда первая вкладка автоматически отображается, все отчеты, связанные со всеми переключателями этой вкладки, выполняются, а затем выбирается первая радиокнопка и отображается ее отчет корреляции. Весь этот процесс занимает около 10-11 секунд, которые я хочу сбить.

Во время запуска сервера я просто прочитал файл myData.RData в global.R. Таким образом, все данные предварительно загружаются (и я предполагаю, что они хранятся в памяти) во время запуска сервера. Что происходит, когда вкладка сосредоточена на том, что считываются data.frames из myData.RData и вызывается серия ggplots (renderPlot) и таблиц (renderText).

Есть ли способ сделать первый отчет за несколько секунд, а затем перейти к выполнению других ggplots и таблиц? Я прошел через проводники и изоляторы реактивности, но не мог понять, какое решение подходит для моей проблемы.

Или есть ли другой способ ускорить загрузку (и обновление) времени?

Некоторый код, чтобы помочь понять проблему ..

# In server.R 

    library(shiny) 
    library(plyr) 
    library(ggplot2) 
    library(grid) 

    source("a.R", local=TRUE) 
    source("b.R", local=TRUE) 

    shinyServer(function(input, output) { 

     # The below two lines represent a report pair to me. So I have a Bar plot and the associated Table report. 
     output$wSummaryPlot = renderPlot({ print(drawBarPlotA("Bar Plot A")) }) 
     output$wSummaryTable = renderText({ tableA() }) 

     # There are about 20 such pairs in server.R 

     # Please note that I am including other R file by "source". The first two lines shows that. Don't know if that is what is causing the problem. 

     # The drawBarPlotA and tableA are functions defined in one of the source files which are included above. 
     # There are 5 such files which are included similarly. 
    }) 

    # In ui.R 
    shinyUI(pageWithSidebar(
     headerPanel(windowTitle = "Perfios - DAS", addHeader()), 

     sidebarPanel(
      conditionalPanel(condition = "input.reportTabs == 1 && input.reportType == 'reportTypeA'", 
         wellPanel(radioButtons("showRadio", strong("Attributes:"), 
               c("Analysis A" = "a", 
                "Analysis B" = "b", 
                "Analysis C" = "c", 
                "Analysis D" = "d", 
                "Analysis E" = "e", 
                "Analysis F" = "f" 
               ))) 
     )) 

     mainPanel(
      tabPanel("A", value = "1", 
       conditionalPanel(condition = "input.reportType == 'reportTypeA'", 
            conditionalPanel(condition = "showRadio == 'X'", 
                plotOutput("wSummaryPlot"), h4("Summary:"), verbatimTextOutput("wSummaryTable")) 


     # Many such element here to accomodate for those 20 reports... 
    ))) 
)) 

# In drawBarPlotA 
drawBarPlotA = function(mainText) { 
    ggplot(data, aes(variable, value, fill = some_fill)) + 
    geom_bar(stat = "identity", position = "dodge", color = "grey") + 
    ylab("Y Label") + 
    xlab(NULL) + 
    theme_bw() + 
    ggtitle(mainText) + 
    scale_fill_brewer(palette = "Set1") + 
    annotate("text", x = 1.2, y = 0, label = "Copyright...", size = 4) + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1, size = "12", face = "bold"), 
      axis.text.y = element_text(size = "12"), 
      plot.title = element_text(size = "14", vjust = 3, face = "bold")) 
} 

tableA = function() { 
    # This is a data.frame which is returned 
    data 
} 
+0

Можете ли вы показать нам свой 'server.R',' ui.R' и любой другой необходимый код? – MadScone

+0

Я добавил фрагмент кода. Надеюсь это поможет. Благодарю. – shingav

ответ

9
shinyServer(function(input, output, session) { 
    values <- reactiveValues(starting = TRUE) 
    session$onFlushed(function() { 
    values$starting <- FALSE 
    }) 

    output$fast <- renderText({ "This happens right away" }) 
    output$slow <- renderText({ 
    if (values$starting) 
     return(NULL) 
    "This happens later" 
    }) 
}) 
+0

Большое спасибо Джо. – shingav

+0

Это, случайно, применимо только к renderText? Я не мог найти какую-либо документацию по сеансу и onFlused событиям. У моего рендеринга, похоже, нет улучшения. – shingav

+0

@RohithVenkatakrishna Нет, я не думаю, что он привязан к 'renderText()'; вы можете использовать любые функции «render ???». –

Смежные вопросы