#r #shiny
#r #блестящий
Вопрос:
Прошу прощения, если это простой вопрос. Я некоторое время пытался разобраться в этом, и я все еще в замешательстве. Я создаю простое блестящее приложение для своего класса и все еще не могу понять, как я подключаю свои входные данные к фактическому выводу графика, чтобы при выборе чего-либо график менялся.
Я работаю над базовым набором данных о авиакатастрофах и пытаюсь показать, как сбои менялись со временем и т.д. Ниже приведен мой код. Я могу настроить входные данные и вывести график, но я не знаю, где мне не хватает части, которая соединяет их.
crash_year <- c(2016,2016,2015,2014,2015,2015)
amateur_built <- c('yes','yes','no','no','no','no')
ac_type <- c('Airplane','Airplane,'Airplane,'Helicopter','Airplane','Unknown')
dt <- data.table(crash_year,amateur_built,ac_type)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "ac", label = "Aircraft Type:",
choices = c('Airplane','Helicopter','Glider','Balloon','Unknown','Gyroplane','Weight-Shift','Powered Parachute','Ultralight','Rocket','Gyrocraft','Powered-Lift','Blimp'),
selected = 'Airplane'),
selectInput(inputId = 'pro_am', label = "Amateur Built?",
choices = c('Yes','No'),
selected = 'Yes')
),
mainPanel(
plotOutput(outputId = 'bar'),
dataTableOutput(outputId = 'data'),
br()
)
)
)
server <- function(input, output, session) {
#create barchart object
output$bar <- renderPlot({
ggplot(data = dt, aes(x=crash_year,y=input$ac))
geom_bar(stat = "identity")
})
}
shinyApp(ui, server)
Комментарии:
1. Пожалуйста, поделитесь своим
dt
, иначе это невозможно воспроизвести.2. приношу свои извинения, я ввел образец данных, с которыми я работаю
Ответ №1:
Ниже приведен рабочий пример. То, что я отредактировал:
Один. Измените pro_am
выбор входных параметров, чтобы они choices = c('yes','no')
соответствовали элементам в вашей таблице данных.
Два. Добавьте reactive
для создания реактивного объекта, который заменяет вашу таблицу данных на основе входных данных. Обратите внимание, что crash_year
это преобразованный коэффициент для построения графика.
В-третьих. Измените ggplot
код. Я не совсем понимаю, что вы хотите сделать, но ggplot
код, который я использую, может отображать гистограмму на основе значений count.
Четыре. Добавьте, renderDataTable
чтобы создать DT
выходные данные.
library(shiny)
library(ggplot2)
library(data.table)
library(DT)
crash_year <- c(2016,2016,2015,2014,2015,2015)
amateur_built <- c('yes','yes','no','no','no','no')
ac_type <- c('Airplane','Airplane', 'Airplane','Helicopter','Airplane','Unknown')
dt <- data.table(crash_year,amateur_built,ac_type)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "ac", label = "Aircraft Type:",
choices = c('Airplane','Helicopter','Glider','Balloon','Unknown','Gyroplane','Weight-Shift','Powered Parachute','Ultralight','Rocket','Gyrocraft','Powered-Lift','Blimp'),
selected = 'Airplane'),
selectInput(inputId = 'pro_am', label = "Amateur Built?",
choices = c('yes','no'),
selected = 'yes')
),
mainPanel(
plotOutput(outputId = 'bar'),
dataTableOutput(outputId = 'data'),
br()
)
)
)
server <- function(input, output, session) {
# Subset dt based on the input
dt_sub <- reactive({
dt2 <- dt[, crash_year := factor(crash_year)][amateur_built == input$pro_am amp; ac_type == input$ac, ]
return(dt2)
})
#create barchart object
output$bar <- renderPlot({
ggplot(data = dt_sub(), aes(x = crash_year, fill = ac_type))
geom_bar(position = "dodge")
})
# Output the data table
output$data <- renderDataTable({
dt_sub()
})
}
shinyApp(ui, server)