Кнопка действия и selectInput в R Shiny: передача ввода selectInput в функцию после нажатия кнопки действия - PullRequest
0 голосов
/ 01 марта 2020

У меня есть вопрос относительно R Shiny.

Я определил функцию в моем global.R, которая принимает 3 аргумента и затем отображает график, поэтому:

get.plot(mode, threshold, names = names)

В моем Блестящее приложение Я установил боковую панель с selectInput (множественный = FALSE) для режима, selectInput (множественный = TRUE) для имен и sliderInput для порога. В главной панели моего ShinyApp я динамически отображаю график, используя входные данные двух объектов selectInput и sliderInput, что прекрасно работает.

Список имен в моей функции содержит 10 разных имен (все они показаны по умолчанию) настройки), которые можно комбинировать любым способом, используя selectInput (множественный = FALSE). Проблема в том, что моя функция довольно длинная, а вычисления занимают много времени, потому что она пересчитывает функцию каждый раз, когда я удаляю имя в selectInput. Например, если я хочу отобразить только 2 имени, я должен удалить 8 имен selectInput, что означает, что функция пересчитывает 8 раз, что затем занимает очень много времени.

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

У вас есть идеи, как я могу решить это? Или у вас есть другие предложения?

Моя настройка выглядит примерно следующим образом:

ui <- fluidPage(

  sidebarLayout(
    sidebarPanel(
      selectInput(inputId = "network_names",
                  label = "Select multiple names",
                  choices = names,
                  multiple = TRUE,
                  selected = names
      ),

      selectInput(inputId = "network_mode",
                  label = "Select a mode",
                  choices = list("Mode 1",
                                 "Mode 2")
      ),

      sliderInput(inputId = "threshold",
                  label = "Threshold",
                  min = 1,
                  max = 10,
                  value = 3)
)


server <- function(input, output){

output$network <- renderPlot({
  if(input$network_mode == "Mode 1") {

    get.plot(1, input$threshold, names = input$network_names)

  } else if(input$network_mode == "Mode 2") {

    get.plot(2, input$threshold, names = input$network_names)
  }
})
}

Любая помощь приветствуется. Большое спасибо.

...