R Блестящая сводная статистика из выбранной выпадающей переменной

Я очень новичок в R блестящий. Я разрабатывал код, который позволит мне выбрать переменную из набора данных.csv и затем создать сводную статистику. Выпадающее меню для выбора переменной не активируется, предыдущая функция фильтрации данных по стратам не работает и сводная статистика не генерируется. Любая помощь будет оценена. Спасибо.

library(shiny)
library(ggplot2)
library(dplyr)
library(tidyverse)


## Only run examples in interactive R sessions
if (interactive()) {

  ui <- fluidPage(

    # App title ----
    titlePanel("Survey Data Analysis Template"),

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

      # Sidebar panel for inputs ----
      sidebarPanel(

        # Input: Select a file ----
        fileInput("file1", "Choose CSV File",
                  multiple = TRUE,
                  accept = c("text/csv",
                             "text/comma-separated-values,text/plain",
                             ".csv")),

        # Horizontal line ----
        tags$hr(),

        # Input: Checkbox if file has header ----
        checkboxInput("header", "Header", TRUE),

        # Input: Select separator ----
        radioButtons("sep", "Separator",
                     choices = c(Comma = ",",
                                 Semicolon = ";",
                                 Tab = "\t"),
                     selected = ","),

        # Input: Select quotes ----
        radioButtons("quote", "Quote",
                     choices = c(None = "",
                                 "Double Quote" = '"',
                                 "Single Quote" = "'"),
                     selected = '"'),

        # Horizontal line ----
        tags$hr(),

        # Input: Select number of rows to display ----
        radioButtons("disp", "Display",
                     choices = c(Head = "head",
                                 All = "all"),
                     selected = "head"),



        # Include a Slider for Strata
        sliderInput("strata",
                    "strata:",
                    min = 1,
                    max = 20,
                    value = c(1,20),
                    step=1),

      # Select Variable from the selected Dataset 


      selectInput("vari", "Variable", 
                   choices=colnames(df)),

       hr(),
       helpText("")  


      ),  

      ########################## 

      # Main panel for displaying outputs ----
      mainPanel(

        # Output: Data file ----
        tableOutput("contents"),
        verbatimTextOutput("summary") # Generate Summary Statistics for the selected variable by strata 

      )  
    )
  )






  server <- function(input, output, session) {

    mytable <- reactive({

      req(input$file1)

      df <- read.csv(input$file1$datapath,
                     header = input$header,
                     sep = input$sep,
                     quote = input$quote, stringsAsFactors = FALSE)

      print(df)
      df<-as.data.frame(df)

      # Subset the data to filter based on strata 
      df<- df %>% 
      filter(df$Strata>=input$strata[1] & df$Strata<=input$strata[2])



      df<-as.data.frame(df)
      print(df)

      if(input$disp == "head") {
        return(head(df))
      }
      else {
        return(df)
      }


    # Output by Strata Filter
    output$contents <- renderTable({
      # Now do use (), since we are calling a value from a reactive.
      mytable()


    })

    # Create Table of Summary Statistics from the selected Variable

    print(mytable)
    mytable<-as.data.frame(mytable)

    # Select based on the drop down variable
    mytable<- mytable %>% 
      select(mytable$vari)

    # Generate a summary of the dataset
    output$summary <- renderPrint({
      dataset <- mytable()
      summary(dataset)
    })


    })


  }
  # Run the app ----
  shinyApp(ui, server)

}

2 ответа

Извините, но ваш код немного грязный, поэтому я начал с нуля, основываясь на другом ответе, и использовал его в качестве отправной точки. Следующий код делает пару вещей:

  1. Показать загруженный CSV,
  2. Показать сводку CSV
  3. Построить гистограмму выбранной переменной (если она числовая).

Переменная Dropdown создается с renderUI внутри server

 library(shiny)
    library(DT)

    server <- function(input, output, session){
      myData <- reactive({
        inFile <- input$file1
        if (is.null(inFile)) return(NULL)
        data <- read.csv(inFile$datapath, header = TRUE)
        data
      })

      output$contents <- DT::renderDataTable({
        DT::datatable(myData())       
      })

      output$summary <- renderPrint({
          summary(myData())
      })

      output$select <- renderUI({
        df <- myData()
        selectInput("variable", "Variable:",names(df))


      })


      output$plot <- renderPlot({
        df <- myData()
        df <- df[,input$variable]
        hist(df)
      })

    }


    ui<- shinyUI(fluidPage(
      titlePanel("Uploading Files"),
      sidebarLayout(
        sidebarPanel(
          fileInput('file1', 'Choose CSV File',
                    accept=c('text/csv',
                             'text/comma-separated-values,text/plain',
                             '.csv')),
          uiOutput('select')
        ),
        mainPanel(
          DT::dataTableOutput('contents'),
          verbatimTextOutput('summary'),
          plotOutput('plot')
        )
      )
    )
    )

    shinyApp(ui,server)
mytable <- reactive({ 

не имеет соответствия}) в правильном месте.

Также этот раздел:

# Create Table of Summary Statistics from the selected Variable

print(mytable)
mytable<-as.data.frame(mytable)

# Select based on the drop down variable
mytable<- mytable %>% 
  select(mytable$vari)

Не в каком-либо реактивном контексте. Так что никогда не побежит. Кроме того, вы написали

mytable <- as.data.frame(mytable)

когда вы имеете в виду:

mytable <- as.data.frame(mytable())

Я бы тоже этого не сделал. Назовите это как-нибудь еще:

newTable <- as.data.frame(mytable())

Исправьте все это и сделайте еще один шаг.

Другие вопросы по тегам