R Shiny:非反应性文本输出
R Shiny : non-reactive text output
我只是想将输出写入 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() 等,但在这种情况下这不是我想要的。
谢谢。
如果你真的想要输出到屏幕,你仍然可以在 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!!!")
})
}
)
)
另一方面,如果您只需要将某些内容打印到控制台,您可以使用 cat
,如 ?observerEvent
的文档所示
observeEvent(input$doBtn, {
cat("some text")
})
我只是想将输出写入 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() 等,但在这种情况下这不是我想要的。
谢谢。
如果你真的想要输出到屏幕,你仍然可以在 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!!!")
})
}
)
)
另一方面,如果您只需要将某些内容打印到控制台,您可以使用 cat
,如 ?observerEvent
observeEvent(input$doBtn, {
cat("some text")
})