我不太理解R的消息、cat 、打印等等,但我想知道是否有可能捕获消息并在一个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,这确实让我找到了一个解决方案.我不太确定如何使用该函数来实现我所需要的功能,因为我的问题是,我有一个函数,它一次打印出几条消息,而使用一种简单的方法,只打印最后一条消息.以下是我的第一次try (如果您只有一条消息要显示,那么这一try 就有效):

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个被输出.因此,我的最终解决方案是使用shinyjs包中的html函数(免责声明:我编写了该包),它允许我更改或附加到元素中的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相关问答推荐

带有分组因子和利克特量表答案列的R格式支持表

最优收敛

使用%in%时如何应用多个条件?

如何在列表的子元素上使用setName

如何使用行政边界形状文件中的人口普查数据调整格栅数据集中的人口数据

如何将y轴上的线定位得彼此更近

有没有方法将paste 0功能与列表结合起来?

使用gggplot 2在R中重新调整面板和y轴文本大小

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

使用ggplot将平滑线添加到条形图

MCMC和零事件二元逻辑回归

将复杂的组合列表转换为数据框架

如何在R中对深度嵌套的tibbles中的非空连续行求和?

将包含卷的底部25%的组拆分为2行

多个模拟序列间的一种预测回归关系

为左表中的所有行使用值Fill滚动左连接

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

在具有多个响应变量的比例堆叠条形图上方添加总计

Conditional documentr::R中数据帧的summarize()

如果满足条件,则替换列的前一个值和后续值