gpt4 book ai didi

r - 是否可以在 Shiny 的 ui 中显示控制台消息(用 `message` 编写)?

转载 作者:行者123 更新时间:2023-12-03 09:09:10 26 4
gpt4 key购买 nike

我不太了解 R 的消息 vs cat vs print vs 等等,但我想知道是否有可能捕获消息并将它们显示在一个 Shiny 的应用程序中?

示例:以下应用程序可以捕获 cat 语句(以及打印语句),但不能捕获消息语句

runApp(shinyApp(
ui = fluidPage(
textOutput("test")
),
server = function(input,output, session) {
output$test <- renderPrint({
cat("test cat")
message("test message")
})
}
))

Cross post from the shiny-discuss Google group since I got 0 answers.

最佳答案

一辉建议我用withCallingHandlers ,这确实让我找到了解决办法。我不太确定如何以完全满足我需要的方式使用该函数,因为我的问题是我有一个函数一次打印多条消息,而使用天真的方法只打印最后一条消息。这是我的第一次尝试(如果您只有一条消息要显示,则有效):

foo <- function() {
message("one")
message("two")
}

runApp(shinyApp(
ui = fluidPage(
actionButton("btn","Click me"),
textOutput("text")
),
server = function(input,output, session) {
observeEvent(input$btn, {
withCallingHandlers(
foo(),
message = function(m) output$text <- renderPrint(m$message)
)
})
}
))

请注意只有 two\n被输出。所以我的最终解决方案是使用 html函数来自 shinyjs包(免责声明:我写了那个包),它允许我更改或附加到元素内的 HTML。它工作得很好 - 现在两条消息都被实时打印出来。
foo <- function() {
message("one")
Sys.sleep(0.5)
message("two")
}

runApp(shinyApp(
ui = fluidPage(
shinyjs::useShinyjs(),
actionButton("btn","Click me"),
textOutput("text")
),
server = function(input,output, session) {
observeEvent(input$btn, {
withCallingHandlers({
shinyjs::html("text", "")
foo()
},
message = function(m) {
shinyjs::html(id = "text", html = m$message, add = TRUE)
})
})
}
))

关于r - 是否可以在 Shiny 的 ui 中显示控制台消息(用 `message` 编写)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30474538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com