将控制台输出传递给Shiny,作为状态更新

时间:2015-07-24 22:41:37

标签: r console shiny

我使用R和Shiny创建了一个应用程序,并希望将控制台中发生的所有内容输出到Shiny应用程序中的特殊状态窗口。 以下是Shiny应用程序调用的函数框架的外观。

myfunction = function(x,y,path....){
if(...){...}
cat("Reading Database\n")
df = read.csv(...)
cat("Processing\n")
#MORE CODE
}

我想要一个状态栏,通过查看cat(...)控制台输出来显示被调用函数的进度。 如果是,可以在不对原始功能进行任何更改的情况下完成(仅在server.R和/或ui.R中进行更改)吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,我不知道如何使用正常的Shiny方法来使用反应性。我尝试将其与textOuput + printText一起使用但我无法使用。我很乐意看到其他解决方案,但这是我的解决方案,使用shinyjs包更新元素而不是使用反应性。我希望这对你有用,这很简单。

library(shiny)
library(shinyjs)

calculate <- function() {
  lapply(1:5, function(x) {
    message(x)
    Sys.sleep(0.5)
  })
  message("Done")
}

runApp(shinyApp(
  ui = fluidPage(
    shinyjs::useShinyjs(), br(),
    actionButton("btn","Click me"), br(), br(),
    "Progress:",
    tags$pre(id = "progress")
  ),
  server = function(input,output, session) {
    observeEvent(input$btn, {
      withCallingHandlers({
        shinyjs::text("progress", "")
        calculate()
      },
      message = function(m) {
        shinyjs::text(id = "progress", text = m$message, add = TRUE)
      })
    })
  }
))