2017-08-02 27 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,所以它会更容易看到问题。我希望得到第一个输出而不用等待第二个输出。

+0

一个简单的解决方案是通过操作按钮触发昂贵的计算。 – Jimbou

+0

谢谢,我正在寻找一个不涉及另一个操作按钮的解决方案,我希望用户只能点击一次 – Nooga

回答

1

这是目前不可能的(至少不会与本机闪亮代码 - 你总是可以破解一个解决方法)。在闪亮的github存储库上存在一个开放的问题:https://github.com/rstudio/shiny/issues/1705

+0

感谢您的回答。我无意中发现了另一种解决方法。如果使用'tabsetPanel()'并将更昂贵的计算放在不同的'tabPanel()'中,它实际上会立即显示它...因此,如果不必将它们都放在同一页面中, – Nooga

+0

是的,这将工作,因为闪亮试图优化计算,并且它只更新当前对用户可见的输出(可以使用'outputOptions'来更改,但这是一个不同的故事) –

相关问题