Наблюдение за событием срабатывает ненужным при использовании одного EvenExpr для множественного обработчикаExpr в Shiny - PullRequest
0 голосов
/ 09 февраля 2019

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

. Я использую наблюдайте событие , чтобы управлять моим приложением для ненужного запуска ( множественныйhandleExpr с одним eventExpr ), и это моя сокращенная версия кода.Прошу прощения за мой код, который не воспроизводится.

 observeEvent(input$action,{

    isolate(system2("bash_script/plink.sh",args = c(input$file$datapath,input$type,input$sum_stat,input$Disease,input$Ethnic,input$Ref)))

    output$table_score <- renderDataTable({
      percentile <- read.csv("../output/score_percentile.csv",header = T, sep = "\t")
    }, selection = "single")

    output$table_variant <- renderDataTable({
      varaints_in_sample <- fread("../output/summary.csv", header = T, drop = 1)
    })

    #Plot Graph
    output$plot <- renderPlot({
      s <- input$table_score_cell_clicked
      plot("../output/score_percentile_plot.csv",s,"analysis")
    })

  })

Моя проблема в том, что , когда я запускаю приложение в первый раз, все под контролем. Однако , если я хочу выбрать новый вход.например, я изменяю исходную болезнь от болезни сердца к другой болезни.мое приложение.будет вызван без необходимости, хотя я НЕ нажал на кнопку действия.

Итак, есть ли способ использовать наблюдать за событием с одним evenExpr для нескольких дескрипторовExpr

Спасибо всем за помощь!

1 Ответ

0 голосов
/ 10 февраля 2019

Я думаю, это упрощенный пример вашей проблемы.Решение состоит в том, чтобы поместить все ваши input$... внутрь isolate().

library(shiny)

ui <- fluidPage(

   sidebarLayout(
      sidebarPanel(
         sliderInput("bins",
                     "Number of bins:",
                     min = 1,
                     max = 50,
                     value = 30),
         actionButton('action', 'Click')
      ),

      mainPanel(
         plotOutput("distPlot")
      )
   )
)

server <- function(input, output) {

    output$distPlot <- renderPlot({
        req(input$action)
        # generate bins based on input$bins from ui.R
        x    <- faithful[, 2] 
        bins <- seq(min(x), max(x), length.out = isolate(input$bins) + 1)

        # draw the histogram with the specified number of bins
        hist(x, breaks = bins, col = 'darkgray', border = 'white')
    })

}

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