R Shiny - 顺序文本输出

时间:2018-01-04 11:24:36

标签: r shiny

我想在处理代码之前先打印文本,然后在代码执行后打印确认。

这是我的代码(app.R的ui和服务器): 所有未指定的变量都在app.R文件中启动。

ui <- fluidPage(
  # Application title
  titlePanel(h1("Order2Ship", align="center")),
  # Sidebar iputs
  sidebarLayout(
    sidebarPanel( #LONG LIST OF INPUTS
    ),
    # On Screen output
    mainPanel(
      textOutput("START"),
      textOutput("Confirm")
    )
  )
)
# Underlining code for output (computes the whole each time an input is changed)
server <- function(input, output) {
  observeEvent(input$Do, { # ignores all return values
    output$START <- renderText({"Starting Analysis"})
    O2S( #LONG LIST OF PARAMETERS, FROM INPUTS
    )
    output$Confirm <- renderText({"Analysis Done"})
  })
}
# Run the application
shinyApp(ui = ui, server = server)

我不需要函数O2S的任何返回,它基本上将一个文件作为输入并生成解决方案文件。但是,在函数运行之后,两个文本输出都同时显示。我想不明白。我刚刚开始使用Shiny,很抱歉这样一个天真的问题。

1 个答案:

答案 0 :(得分:2)

您好,您可以使用 shinyjs 创建类似这样的chainevent

library(shinyjs)
library(shiny)

ui <- fluidPage(
  # Application title
  titlePanel(h1("Order2Ship", align="center")),
  # Sidebar iputs
  sidebarLayout(
    sidebarPanel( #LONG LIST OF INPUTS
      actionButton(inputId = "Do",
                   label = "Start")
    ),
    # On Screen output
    mainPanel(
      textOutput("START"),
      textOutput("Confirm"),
      useShinyjs()
    )
  )
)
# Underlining code for output (computes the whole each time an input is changed)
server <- function(input, output) {
  startText <- eventReactive({input$Do},{
    runjs("Shiny.onInputChange('analysisStarted',Date.now())")
    "Starting Analysis"
  },
  ignoreInit = TRUE)
  output$START <- renderText({startText()})
  observeEvent(input$analysisStarted, { # ignores all return values
    temp <- NULL
    for(i in seq(50000)){
      temp <- c(temp,i)
    }
    runjs("Shiny.onInputChange('analysisFinished',true)")
  },
  ignoreInit = FALSE)
  confirmText <- eventReactive({input$analysisFinished},{
    "Analysis Done"
  },
  ignoreInit = FALSE)
  output$Confirm <- renderText({confirmText()})
}
# Run the application
shinyApp(ui = ui, server = server)

希望这有帮助!