R Shiny: mirror R console outputs to Shiny

走远了吗. 提交于 2019-12-24 14:34:27

问题


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

来源:https://stackoverflow.com/questions/35009691/r-shiny-mirror-r-console-outputs-to-shiny

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!