Как обновить textOutput в R Shiny при выполнении действия actionButton? - PullRequest
0 голосов
/ 03 апреля 2019

Я создаю пользовательский интерфейс R Shiny (разделенный на пользовательский интерфейс и сервер), который тратит около трех часов на создание базы данных клинических записей о заболеваниях с учетом некоторых параметров блестящего пользовательского интерфейса.По завершении data.frame передается в модель Кокса, и результат будет отображаться в виде графика.

При запуске R на терминале код будет печатать информацию в течение этих трех часов, например, сколько пациентов / лекарств было проанализировано.

Я пытался использовать отдельные функции пользовательского интерфейса textOutput, но мне не удается обновить textOutput из вызова функции, выполняемой при нажатии кнопки.Я считаю, что это может быть связано с областью применения.Мой код разделен по пользовательскому интерфейсу и серверу:

Примечание: кнопка нажата один раз, и я хотел бы, чтобы textOutput несколько раз обновлялся по этому клику при вызове изнутрипетля.

library(shiny)


shinyUI(fluidPage(

  # Application title
  titlePanel("CPRD EHR Statistical Toolset"),


  sidebarLayout(
    sidebarPanel(
      helpText("A long list of Input features below here."),
      mainPanel(
        h4("Medical record construction"),
        textOutput("numPatientsOutput"),
        actionButton("executeButton", "Execute Cox")
      )
    )
  )
))

library(shiny)

shinyServer(function(input, output) {

  observeEvent(input$executeButton, {
    coxDF<-runBuildModel(input, output)
  }) #endf of execute action

})

runBuildModel <- function(input, output) {
  for(i in 1:10) {
    #This is not updating.
    output$numPatientsOutput <- renderText({paste("patient:",i)})
  }
}

1 Ответ

0 голосов
/ 03 апреля 2019

server в основном выполняет весь код перед его рендерингом.Вот почему вы получаете только последнюю строку текста.

Что вы можете сделать, это создать reactiveValue и обновить это значение в цикле for.Кроме того, вам нужно создать observer для отслеживания значения.

Рабочий пример

library(shiny)

ui <- shinyUI(fluidPage(

  # Application title
  titlePanel("CPRD EHR Statistical Toolset"),


  sidebarLayout(
    sidebarPanel(
      helpText("A long list of Input features below here.")),
    mainPanel(
      h4("Medical record construction"),
      htmlOutput("numPatientsOutput"),
      actionButton("executeButton", "Execute Cox")
    )

  )
))

server <- shinyServer(function(input, output) {
  runBuildModel <- function(input, output) {
    for(i in 1:10) {
      #This is not updating.
      rv$outputText = paste0(rv$outputText,"patient:",i,'<br>')
    }
  }

  rv <- reactiveValues(outputText = '')

  observeEvent(input$executeButton, {
    coxDF<-runBuildModel(input, output)
  }) #endf of execute action

  observe(output$numPatientsOutput <- renderText(HTML(rv$outputText)))
})



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