Одна кнопка действия для нескольких выходов.

#r #shiny #action-button

Вопрос:

У меня есть блестящее приложение, которое даст мне 6 графиков, и если я захочу, загрузите график или данные, используемые для построения графика в формате csv. Я хотел кнопку запуска, которая запустит процесс всех шести сюжетов. Возможно ли это сделать? Я проверил несколько выходов с помощью одной кнопки действия. Мне это было не очень понятно. Я также хотел бы иметь кнопку «Очистить действие», которая очистит все входы и выходы.

 library(shiny) library(shinydashboard)  ui lt;- dashboardPage(dashboardHeader(title = "IDF"),  dashboardSidebar(  sidebarMenu(  menuItem("Data", tabName = "dataimport"),   menuItem("Stationary IDF", tabName = "Stidf"),  menuItem("Non-stationary IDF", tabName = "NStidf"),  menuItem("IDF under climate change", tabName = "Gcmidf"))),  dashboardBody(  tabItems(  tabItem(tabName = "dataimport",  fileInput("file","Hourly precipitation data(.csv format)",accept = ".csv"),  checkboxInput("header", "Header", TRUE),  radioButtons('UserCov',"Mention if there is a local covariate to be added, if Yes add the file",   choices = list("No" = 1,"Yes" = 2), inline = T),  fileInput("cov","Local covariate data(.csv format)",accept = ".csv"),  checkboxInput("head", "Header", TRUE),  numericInput("lat","Latitude", value = c()),  numericInput("lon","Longitude", value = c()),  radioButtons('gcm', "Select the GCM", choices = list("MPI" = 1,"MRI" = 2,"CNRM"=3,"EC" =4,"MIR"=5), inline = T),  sliderInput("fut", label = h4("Select the starting point of time period"),min = 2015, max = 2100, value = 2020)),  tabItem(tabName = "Stidf",plotOutput('SIDF')),   tabItem(tabName = "NStidf",plotOutput('NIDF')),  tabItem(tabName = "Gcmidf",   tabsetPanel(type = "tabs",  tabPanel("s1",plotOutput('plot1')),  tabPanel("s2",plotOutput('plot2')),  tabPanel("s3",plotOutput('plot3')),  tabPanel("s5", plotOutput('plot4'))))  )))        server lt;- function(input, output,session) {  output$SIDF lt;- renderPlot({  req(plotSt())  print(plotinput(plotSt()))  })  output$NIDF lt;- renderPlot({  req(plotNSt())  print(plotinput(plotNSt()))  })    output$plot1 lt;- renderPlot({  req(PCC1())  print(plotinput(PCC1()))  })  output$plot2 lt;- renderPlot({  req(PCC2())  print(plotinput(PCC2()))  })  output$plot3 lt;- renderPlot({  req(PCC3())  print(plotinput(PCC3()))  })  output$plot4 lt;- renderPlot({  req(PCC4())  print(plotinput(PCC4()))  })  }  shinyApp(ui, server)  

Это моя сюжетная функция

 plotinput lt;- function(P){  PG lt;- as.matrix(P)  A = PG[1,]; B = PG[2,]; C = PG[3,]  Z = matrix(0,LDR,LRP)  for (j in 1:LRP) {  for (i in 1:LDR) {  if (C[i] != 0) {   Z[i,j] = A[i]  ((B[i]/C[i])*(((-log(1-(1/RP[j])))^-C[i])-1))   } else {   Z[i,j] = A[i]  ((B[i])*(-log(-log(1-(1/RP[j])))))   }  }  }      col_set lt;- rainbow(nrow(Z))  matplot(Z,type = "o", lty = "solid",   lwd = 2, xlab = "Duration (hr)",ylab = "Intensity (mm/hr)",   col = col_set, cex.lab = 1.5, cex.axis=1.5,   cex.main=1.5, cex.sub=1.5, pch = 21, xaxt='n')   }  

Я был бы очень признателен за любую помощь.

Комментарии:

1. ДА. Просто добавьте зависимость от кнопки «Действие» в каждую render учетную запись, которую вы хотите обновить при нажатии Go . Аналогично, вы можете использовать eventReactive кнопку, которая зависит от вашей Clear кнопки, чтобы очистить ваши (реактивные) данные, от которых зависят графики. Без воспроизводимого примера трудно дать более конкретный совет: у вас есть опечатка в коде в строке 34 и вы не предоставили никаких тестовых данных.

2. От ввода данных на каждый график зависит множество функций, поэтому мне трудно показать небольшой образец моего кода. Спасибо вам за ваш комментарий. Я попытаюсь сейчас найти то, что вы предложили.

3. Вход для функции «plotinput» представляет собой матрицу 3×7.