R Shiny:非活动文本输出

rst*_*uck 5 r shiny

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

如果我verbatimTextOutput("txt")在ui.R中添加:,然后尝试执行以下操作:

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

我收到警告:观察器中出现未处理的错误: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)
Run Code Online (Sandbox Code Playgroud)

甚至可以以这种方式直接引用文本输出元素,而无需将其包装在其自己的render *函数中吗?我认为我不能从字面上理解错误消息,因为要更新的文本非常简单。是的,我知道withProgress()等,但是在这种情况下,这不是我想要的。

谢谢。

cde*_*man 4

如果您确实想要输出到屏幕,您仍然可以renderText在您的observeEvent. 我添加了一条额外的文本消息来演示如何使用,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!!!")
            })

        }
    )
)
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您只需要将某些内容打印到控制台,您可以cat按照文档中所示使用?observerEvent

observeEvent(input$doBtn, {
        cat("some text")
})
Run Code Online (Sandbox Code Playgroud)