I made a function that is performing some complex calculations via a for loop. In order to show progress, the function will print out the current progress via something like message(...), and the final outcome of this function is a data frame. 
But when I implement this in Shiny, the for loop counter is printed only in the R console rather than the Shiny document as intended. Is there a way to showing the outputs in the R console in real time during executions?
A very minimal example is here. Notice that in the Shiny interface, the counter is not present.
foo <- function() {
  ComplexResult = NULL # vector initiation 
  for(i in 1:5){   
    ComplexResult[i] = letters[i] 
  # At each stage of the for loop, we store some complex calculations
    message(paste0("For loop counter is on i = ", i)) 
  # This shows progress of the for loop, also other relevant messages if necessary.
   Sys.sleep(0.1) # Comment this out to remove pauses during execution.
 }
  return(as.data.frame(ComplexResult)) 
}
runApp(shinyApp(
  ui = fluidPage(
    dataTableOutput("VeryFinalOutcome")
  ),
  server = function(input,output, session) {
    fooOutcome = foo()
    output$VeryFinalOutcome = renderDataTable(fooOutcome) # This will only display the function output (i.e. the letters) in Shiny.
  }
))
My attempt: the capture.output(foo(),type="message") function did not help. Even though it captured the messages successfully, but it can only be displayed after all execution. And there is a extra issue of not being able to store the actual foo() outputs. 
Thanks
