R Shiny:非响应式文本输出

8

我只是想将输出写入到textOutput中,但我不希望它响应任何反应 - 我想完全控制何时更新文本(用于通知:基本上我想根据后端处理编写一些日志消息到屏幕上)。

如果我在ui.R中添加:verbatimTextOutput(“txt”),然后尝试执行:

observeEvent(input$someButton, {
 ... # do some work
 output$txt <- "some text" #Error: see below
 ... # do some more work
})

我收到了以下警告信息:警告:观察者中的未处理错误:txt 输出的字符不符合预期

补充说明:以下是可重现的示例:

server <- function(input, output) {
  observeEvent(input$doBtn, {
    #...  do some work
    output$txt <- "some text" #crashes app.
    #... do some more work
  })

  output$distPlot <- renderPlot({
    hist(rnorm(input$obs), col = 'darkgray', border = 'white')
  })
}

ui <- shinyUI(fluidPage(
  mainPanel(
    verbatimTextOutput("txt"),
    actionButton("doBtn", "Do something")
  )
))

shinyApp(ui = ui, server = server)

在不使用自己的render*函数包装它的情况下,直接引用文本输出元素是否可能?我认为我不能太字面理解错误信息,因为被更新的文本非常简单。是的,我知道withProgress()等等,但在这种情况下,那不是我想要的。

谢谢。


为了更好地理解上下文,提供一个可重现的示例会更有帮助。通常,如果您想返回文本,则可以使用renderTextrenderUI - cdeterman
@cdeterman 现在已添加。 - rstruck
1个回答

4
如果你确实想要在屏幕上输出结果,你仍然可以在你的observeEvent中使用renderText。我添加了一条额外的文本消息来演示htmlOutput的使用,以防你不想在文本周围显示方框。
require(shiny)

runApp(
    list(
        ui = pageWithSidebar(
            headerPanel("text test"),
            sidebarPanel(
                p("Demo Page."),
                actionButton("doBtn", "Do something")
            ),
            mainPanel(
                verbatimTextOutput("txt"),
                htmlOutput("text2")
            )
        ),
        server = function(input, output){

            observeEvent(input$doBtn, {
                #... # do some work
                output$txt <- renderText("some text")
                #... # do some more work
            })

            output$text2 <- renderUI({
                HTML("my awesome text message in HTML!!!")
            })

        }
    )
)

另一方面,如果你只需要将内容输出到控制台,你可以像?observerEvent文档中所示,直接使用cat命令。

observeEvent(input$doBtn, {
        cat("some text")
})

我有几个不同的通过shinyApp(ui = ui, server = server)构建的应用程序。但是在这种方案中,上述方法不起作用,我一直收到“Error in handlers$add(handler, key, tail) : Key / already in use”的错误提示。但是当您像所示那样将所有内容包装在runApp()中时,它确实有效。顺便说一下 - 您的方法是否是构建多文件闪亮应用程序的首选/更好方法?我只是复制参考示例。 - rstruck
没关系...看来我需要直接引用文件并运行它,而不是使用runApp。无论如何,它现在可以工作了!谢谢! - rstruck
@rstruckпјҢжҲ‘еҸӘдҪҝз”ЁrunAppж–№жі•жқҘеҝ«йҖҹеҲӣе»әиҮӘеҢ…еҗ«зҡ„зӯ”жЎҲгҖӮеҰӮжһңжҲ‘жңүдёҖдёӘжӣҙеӨ§зҡ„зӨәдҫӢпјҢжҲ‘жҖ»жҳҜдҪҝз”Ёдј з»ҹзҡ„ui.Rе’Ңserver.Rж–Ү件пјҢдҪҶдҪҝз”Ёgit gistжқҘеӣһзӯ”й—®йўҳгҖӮ - cdeterman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接