отображение «реактивных значений» в г блестящем - PullRequest
0 голосов
/ 24 марта 2019

Основная идея состоит в том, чтобы распечатать значение для конечного пользователя после его изменения.

Предоставленный код создает блестящую панель инструментов и через несколько секунд выводит значение 0 на экран.Что я должен изменить, чтобы он печатал все промежуточные значения (4, 3, 2, 1) до того, как он напечатает 0?И как было бы лучше отображать значения, а не просто печатать?

library(shiny)
library(shinydashboard)
x = 5

ui <- dashboardPage(
  dashboardHeader(title = "test"),
  dashboardSidebar(),
  dashboardBody(textOutput(outputId = "out"))
)

server <- function(input, output){
  while(x > 0){
    x = x - 1
    Sys.sleep(1)
    output$out <- renderPrint(x)
  }
}

shinyApp(ui, server)

Я ожидаю, что результат будет:

4
3
2
1
0

или таблица, содержащая выше, нофактический выход составляет всего 0.

1 Ответ

0 голосов
/ 24 марта 2019

Вот, возможно, кое-что, что может вам помочь. Вы должны определить переменную вне renderPrint. В моем примере переменная является изменением триггера таймера, но может быть любым другим входом. Код не идеален, начальный цикл выполняется немедленно, и вы увидите 5 и 4 с начала, но это должно быть хорошим началом.

library(shiny)
library(shinydashboard)
x = 5

ui <- dashboardPage(
  dashboardHeader(title = "test"),
  dashboardSidebar(),
  dashboardBody(
    textOutput(outputId = "out"),
    verbatimTextOutput(outputId = "outText"),
    tags$hr(),
    actionButton("go","Change value on click"),
    verbatimTextOutput(outputId = "out2")
    )
)

server <- function(input, output){

  # define reactive variable
  outVar <- reactiveValues(dataRow=x,
                           text=paste(x),
                           value = x)
  # define time dependent trigger
  autoInvalidate <- reactiveTimer(2000) 

  # render print
  output$out <- renderPrint(outVar$dataRow)
  # render text print
  output$outText <- renderText(outVar$text)
  # render print
  output$out2 <- renderText(outVar$value)


  # time dependent change of variable
  observeEvent(autoInvalidate(),{
    # check if > 0 
    if(outVar$dataRow[length(outVar$dataRow)] > 0){
      # add
      outVar$dataRow <- c(outVar$dataRow,outVar$dataRow[length(outVar$dataRow)]-1)
      outVar$text <- paste0(outVar$text,'\n',outVar$dataRow[length(outVar$dataRow)])
    }
  })

  # observer on click button
  observeEvent(input$go,{
    # check if > 0 
    if(outVar$value > 0){
      # lower by one
      outVar$value <- outVar$value - 1
    }
  })
}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...