#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.