2015-04-15 90 views
4

我只是想輸出到textOutput,但我不希望它響應任何反應 - 我想要更新文本時的完全控制(用於通知:我想要基本上是在屏幕上寫一些基於後端處理的日誌消息)。R Shiny:非反應性文本輸出

如果我添加:verbatimTextOutput("txt")我ui.R,然後嘗試做:

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

我得到警告:未處理的錯誤在觀察者:意外的字符輸出TXT

ADDED:可重複的例子:

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) 

它是否是possi可以通過這種方式直接引用文本輸出元素,而無需將其包裝在自己的渲染函數中?我不認爲我可以從字面上理解錯誤信息,因爲正在更新的文本非常簡單。是的,我知道與進步()等,但這不是我想要在這種情況下。

謝謝。

+0

文檔中這將是一個多一點有益的,看看一個對於更深層次的背景可重複使用。通常如果你想返回文本,你可以使用'renderText'或'renderUI'。 – cdeterman

+0

@cdeterman現在加入。 – rstruck

回答

1

如果你真的想要輸出到屏幕上,你仍然可以在你的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") 
}) 
+0

我有幾個不同的內置通過shinyApp(ui = ui,server = server)構建。上述方案在該方案中不起作用,我不斷收到「處理程序$ add(處理程序,鍵,尾部)中的錯誤:鍵/已在使用中」。但是,如果將runat()應用於runApp(),如下所示。順便說一句 - 你的方法是建立一個多文件閃亮的應用程序的首選/更好的方式?我剛剛複製了參考示例。 – rstruck

+0

沒關係......看起來我需要源文件並直接運行而不是使用runApp。無論如何,它的作品!謝謝! – rstruck

+0

@rstruck,我只使用'runApp'方法來快速自包含的答案。如果我有一個更大的例子,我總是使用傳統的'ui.R'和'server.R'文件,但是使用git gist作爲答案。 – cdeterman