我使用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中进行更改)吗?
答案 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)
})
})
}
))