У меня есть вопрос относительно 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)
}
})
}
Любая помощь приветствуется. Большое спасибо.