Блестящий, где вы создаете набор данных на основе реактивного ввода для последующего использования в приложении - PullRequest
0 голосов
/ 11 декабря 2018

У меня относительно тяжелая программа для запуска на основе выбранного вручную ввода.Мне бы хотелось, чтобы мое приложение было таким, чтобы пользователи выбирали параметры, нажимали, а затем создавалась база данных, которую можно использовать для создания нескольких таблиц и графиков на основе этого набора данных.Но создание базы данных может произойти только один раз.

До настоящего времени база данных создавалась до запуска приложения на основе пользовательского ввода.Пример приведен в приведенном ниже коде.

countries <- c("BEL", "FRA", "AFG")
el_inf_ex <- 1


df_TEST <-data.frame(iso3= c(rep("BEL", 10),rep("FRA", 10),rep("AFG", 10)), 
                     year= c(seq(2001, 2010), seq(2001, 2010), seq(2001, 2010)),
                     test= rnorm(30)*el_inf_ex)



#The shiney appp has three parts

  ui <- fluidPage(
    # App title ----
    titlePanel("TEST"),

    # Sidebar layout with a input and output definitions ----
    sidebarLayout(

# 1 Where you select user input ----
      sidebarPanel(

        # Input: Selector for choosing dataset ----
        selectInput(inputId = "Country",
                    label = "Choose a country:",
                    choices = countries),

        # Input: Numeric entry for number of obs to view ----
        sliderInput(inputId = "Year",
                    label = "Choose a year:",
                    value = 2018,
                    min = 2000,
                    max = 2010),
        # Input: Numeric entry for number of obs to view ----
        sliderInput(inputId = "el_inf_ex",
                    label = "El(inf,exrate):",
                    value = 0.3,
                    min = 0,
                    max = 1)
      ),
# 2 Where you specify the output ----
        mainPanel(

          # Output: Tabset w/ plot, summary, and table ----
          tabsetPanel(type = "tabs",
                      tabPanel("Data Input No shock", 
                               # Output: HTML table with requested number of observations ----
                               h3("I. One title:"),
                               tableOutput("CI"),
                               h3("II. Second title:"),
                               tableOutput("VUL")
                      )
          )
        )
      )
)


    # Define server logic to summarize and view selected dataset ----
    server <- function(input, output) {

      # Return the MonArr variable
      datasetInput_CI <- reactive({
        df_TEST %>% filter(iso3 == input$Country, year == input$Year) %>% summarise(blabla = max(test))
      })
      # Return the Vulnerability variables ----
      datasetInput_Vul <- reactive({
        df_TEST %>% filter(iso3 == input$Country, year == input$Year) 
      })
      output$CI <- renderTable(datasetInput_CI())
      output$VUL <- renderTable(datasetInput_Vul())
    }

  shinyApp(ui = ui, server = server)

Таким образом, я хотел бы создать в коде фрейм данных df_TEST, чтобы в приложении можно было выбрать el_inf_ex, а строки для создания набора данных можно было только запуститьодин раз.(В моем реальном приложении мне нужно будет получить другие R-файлы). Затем я хочу использовать вывод (dataframe df_TEST) в графиках и таблицах.

1 Ответ

0 голосов
/ 11 декабря 2018

Я нашел решение сам.Хитрость заключается в использовании функции наблюдений ().В рамках этой функции набор данных может быть создан.

Я изменил некоторые части примера, чтобы все реагировало на кнопку «Обновить».

countries <- c("BEL", "FRA", "AFG")

#The shiney appp has three parts

  ui <- fluidPage(
    # App title ----
    titlePanel("TEST"),

    # Sidebar layout with a input and output definitions ----
    sidebarLayout(

# 1 Where you select user input ----
      sidebarPanel(

        # Input: Selector for choosing dataset ----
        selectInput(inputId = "Country",
                    label = "Choose a country:",
                    choices = countries),

        # Input: Numeric entry for number of obs to view ----
        sliderInput(inputId = "Year",
                    label = "Choose a year:",
                    value = 2018,
                    min = 2000,
                    max = 2010),
        # Input: Numeric entry for number of obs to view ----
        sliderInput(inputId = "el_inf_ex",
                    label = "El(inf,exrate):",
                    value = 0.3,
                    min = 0,
                    max = 10),      
        actionButton("update", "Update")
      ),
# 2 Where you specify the output ----
        mainPanel(

          # Output: Tabset w/ plot, summary, and table ----
          tabsetPanel(type = "tabs",
                      tabPanel("Data Input No shock", 
                               # Output: HTML table with requested number of observations ----
                               h3("I. One title:"),
                               tableOutput("CI"),
                               h3("II. Second title:"),
                               tableOutput("VUL")
                      )
          )
        )
      )
)


    # Define server logic to summarize and view selected dataset ----
    server <- function(input, output) {
      Output <-  reactiveValues(datasetInput_CI = NULL)
      Output <-  reactiveValues(datasetInput_Vul = NULL)


      storage <- reactiveValues()
      observe({
        storage$df_Test <- data.frame(iso3= c(rep("BEL", 10),rep("FRA", 10),rep("AFG", 10)), 
                            year= c(seq(2001, 2010), seq(2001, 2010), seq(2001, 2010)),
                            test= rnorm(30)*input$el_inf_ex)
      })

      # Return the MonArr variable
      observeEvent(input$update, {
        Output$datasetInput_CI <- storage$df_Test %>% filter(iso3 == input$Country, year == input$Year) %>% summarise(blabla = max(test))
      })
      # Return the Vulnerability variables ----
      observeEvent(input$update, {

        Output$datasetInput_Vul <- storage$df_Test %>% filter(iso3 == input$Country, year == input$Year) 
      })
      output$CI <- renderTable(Output$datasetInput_CI)
      output$VUL <- renderTable(Output$datasetInput_Vul)
    }

  shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...