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 ответа
Извините, но ваш код немного грязный, поэтому я начал с нуля, основываясь на другом ответе, и использовал его в качестве отправной точки. Следующий код делает пару вещей:
- Показать загруженный CSV,
- Показать сводку CSV
- Построить гистограмму выбранной переменной (если она числовая).
Переменная 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())
Исправьте все это и сделайте еще один шаг.