2015-10-06 72 views
0

我是Shiny编码新手,我正在编写代码来实现图像处理和计算。但是,由于输出文本仅在函数完成执行时才显示,所以我遇到了问题。如何渲染文本输出而不等待函数完成?

以下是代码我有一部分:

server.R

shinyServer(function(input, output) { 
    for(i in 1:100){ 
     processImage(i); 
     output$console <- renderText({ 
      paste(i," images completed"); 
     }) 
    } 

    processImage(i) <- function(){ 
     # code goes here 
    } 
} 

ui.R

shinyUI(fluidPage(
    titlePanel(
     h4("Image Processing") 
    ), 
    sidebarLayout(
     sidebarPanel(
      # some inputs here 
     ), 
     mainPanel(
      textOutput('console') 
     ) 
    ) 
)) 

output$console直到for循环结束后不会被渲染。我已经在互联网上搜索解决方案,但没有找到。谁能帮我这个?

+0

不确定闪亮的代码,但在常规的是有一个'flush.console'功能。 –

+0

由于'output $ console'与控制台不一样,所以flush.console不适用于我。尝试了我所知道的每一种可能的方式,但仍然无法知道如何在函数仍在运行时呈现文本。 – Woody

+0

对您有帮助吗? http://shiny.rstudio.com/gallery/onflush-example.html –

回答

1

你可以用withProgress这样做。 编辑:您需要安装shinyIncubator

rm(list = ls()) 
library(shiny) 
library(shinyIncubator) 

server <- function(input, output, session) { 
    observe({ 
    if(input$aButton==0) return(NULL) 
    withProgress(session, min=1, max=15, expr={ 
     for(i in 1:10) { 
     setProgress(message = 'Processing...',detail = paste0('Image number ',i)) 
     Sys.sleep(0.5) 
     } 
    }) 
    }) 
} 

ui <- pageWithSidebar(
    headerPanel("Testing"), 
    sidebarPanel(actionButton("aButton", "Let's go!"), width=2), 

    mainPanel(progressInit()) 
) 

shinyApp(ui = ui, server = server) 

enter image description here

+0

我收到一个错误:'错误:无法找到函数“progressInit”' – Woody

+0

需要安装'shinyIncubator'包,对不起! –

+0

感谢,除了使用进度条渲染'output $ console'之外的进度,可以使用'output $ console'渲染进度吗?正如我想要的是在mainPanel中显示进度。 – Woody