Я пытаюсь создать инструмент, в котором пользователь может выбрать ряд параметров (например, партнер, бюджет, месяц, год) и получить прогнозируемое значение для показателя следующих месяцев.
Я построил несколько внешних функций для выполнения задачи. Каждая функция выполняет некоторые задачи и передает данные в следующую функцию, а последняя функция строит четыре модели, прогнозирует с использованием этих моделей, строит ggplots и сохраняет их в списке, к которому можно получить доступ после запуска функций.
Как извлечь графики и прогнозы, которые будут отображаться в приложении Shiny?
UI:
ui <- fluidPage(
titlePanel("Forecasting Tool"),
sidebarLayout(
sidebarPanel(
selectInput("Partner", h3("Partner"),
choices = list("all", "dsp","search","social"), selected = "all"),
numericInput("Budget",
h3("Budget"),
value = 10000),
selectInput("Month", h3("Month"),
choices = list("January", "February", "March", "April","May",
"June", "July", "August", "September", "October",
"November", "December"),
selected = "January"),
selectInput("Year", h3("Year"),
choices = list(2018,2019),
selected = 2019),
submitButton("Submit"), h3("")),
mainPanel(plotOutput("plot"))
)
)
Как мне построить серверную функцию таким образом, чтобы она распознавала, что была нажата кнопка submit
, и запускала внешние функции?
моя последняя функция называется reg_mod
, и она запускает все остальные функции, а затем возвращает конечные объекты в списке (графики, прогнозы и т. Д.), Входные данные которого выглядят следующим образом:
reg_mod(partner, budget, month, year)
Могу ли я получить доступ к объектам и вывести их в функции сервера на основе пользовательского ввода? например:
plot = reg_mod(input$Partner, input$Budget, input$Month, input$year)
output$plot = renderPlot(plot[[1]])
где plot[[1]]
вызывает первый объект, который является сюжетом из reg_mod
EDIT:
Итак, вот пример вспомогательной функции, которая создает некоторые данные и выводит график, который я хочу получить в блестящем приложении, аналогично тому, что я хочу сделать. (обратите внимание, что единственным вариантом выбора месяца является «Август» и 2017 год, что вполне приемлемо, можно просто запустить приложение и запустить по умолчанию).
Helper = function(partner, budget, month, year){
nums = seq(0 , 10, length.out = 100)
Registrations = 5 + 2*rnorm(100, 20, 7)*nums
dates = seq.Date(as.Date("2017-01-01"), as.Date("2017-04-10"), by ="days")
Registrations = data.frame(Date = dates, Registrations = Registrations)
if(partner == "dsp" & month == "August" & year == 2017){
Registrations$Registrations = 0.5*budget*Registrations$Registrations
}
if(partner == "search" & month == "August" & year == 2017){
Registrations$Registrations = 2*budget*Registrations$Registrations
}
if(partner == "social" & month == "August" & year == 2017){
Registrations$Registrations = budget*Registrations$Registrations
}
Plot = ggplot(data = Registrations, aes(x = Date)) +
geom_line(aes(y = Registrations, colour = "Actual"), size = 1)
List_Read = list("Plot" = Plot)
return(List_Read)
}
и вот мой интерфейс и функции сервера:
library(shiny)
library(ggplot2)
# Define UI for application that outputs ggplot
ui <- fluidPage(
titlePanel("Forecasting Tool"),
sidebarLayout(
sidebarPanel(
selectInput("Partner", h3("Partner"),
choices = list("all", "dsp","search","social"), selected="dsp"),
numericInput("Budget",
h3("Budget"),
value = 100),
selectInput("Month", h3("Month"),
choices = list("January", "February", "March", "April","May",
"June", "July", "August", "September", "October", "November",
"December"),
selected = "August"),
selectInput("Year", h3("Year"),
choices = list(2017,2018),
selected = 2017),
submitButton("Submit"), h3("")),
mainPanel(plotOutput("plot"))
)
)
# Define server logic required to output ggplot from helper function
server <- function(input, output, session) {
source("C:/Users/ksiopes/Documents/Ad Hoc/Survival/Prefinal Insights
Function Files/For Shiny Function/Testing/Helper3.R",
local = FALSE)
plot_List = eventReactive(input$Submit,{
Helper(input$Partner, input$Budget, input$Month, input$Year)
})
#Output the plot
output$plot<- renderPlot({
plot = plot_List()
plot[[1]]
})
}
# Run the application
shinyApp(ui = ui, server = server)
Редактировать 2:
library(shiny)
library(ggplot2)
source("C:/Users/ksiopes/Documents/Ad Hoc/Survival/Prefinal Insights
Function Files/For Shiny Function/Testing/Helper3.R", local = TRUE)
# Define UI for application that uses function to create random data and
output ggplot
ui <- fluidPage(
titlePanel("Forecasting Tool"),
sidebarLayout(
sidebarPanel(
selectInput("Partner", h3("Partner"),
choices = list("all", "dsp","search","social"), selected =
"dsp"),
numericInput("Budget",
h3("Budget"),
value = 100),
selectInput("Month", h3("Month"),
choices = list("January", "February", "March",
"April","May", "June", "July", "August", "September",
"October", "November", "December"),
selected = "August"),
selectInput("Year", h3("Year"),
choices = list(2017,2018),
selected = 2017),
submitButton("Submit"), h3("")),
mainPanel(plotOutput("plot"))
)
)
# Define server logic required to run sourced function and output ggplot
server <- function(input, output, session) {
plot_List = eventReactive(input$Submit,{
Helper(input$Partner, input$Budget, input$Month, input$Year)
})
#Output the plot
output$plot<- renderPlot({
plot = plot_List()
plot[[1]]
})
}
# Run the application
shinyApp(ui = ui, server = server)