Добавляем фильтр по годам: числовой слайдер
Слайдер, как и числовое поле ввода, позволяет пользователю выбирать числовые значения.
Если начальное значение слайдера (аргумент value) — одно число, то слайдер используется для выбора одного значения. Если же начальное значение — вектор из двух чисел, то слайдер позволяет выбрать два числа вместо одного.
Мы уже убедились, что у разных элементов ввода могут быть разные аргументы. Запомнить точный набор аргументов для каждой функции ввода непросто. Единственный надёжный способ узнать, какие аргументы доступны для конкретной функции, — обратиться к её документации или файлу справки.
Это упражнение является частью курса
Примеры использования: создание веб-приложений с Shiny в R
Инструкции к упражнению
- Добавьте
sliderInput()в UI с идентификатором "years" и меткой "Years" (строка 14).- Установите минимальное значение равным самому раннему году в наборе данных, а максимальное — самому позднему.
- По умолчанию границы слайдера должны быть установлены на 1977 и 2002, чтобы отображались только данные за эти годы включительно.
- Добавьте код на сервере так, чтобы выбранные в слайдере годы использовались для фильтрации данных
gapminderи в результате отображались только записи за выбранный диапазон лет (строка 28).
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput("title", "Title", "GDP vs life exp"),
numericInput("size", "Point size", 1, 1),
checkboxInput("fit", "Add line of best fit", FALSE),
radioButtons("color", "Point color",
choices = c("blue", "red", "green", "black")),
selectInput("continents", "Continents",
choices = levels(gapminder$continent),
multiple = TRUE,
selected = "Europe"),
# Add a slider selector for years to filter
___("years", ___, ___, ___, ___)
),
mainPanel(
plotOutput("plot")
)
)
)
# Define the server logic
server <- function(input, output) {
output$plot <- renderPlot({
# Subset the gapminder data by the chosen years
data <- subset(gapminder,
continent %in% input$continents &
year >= ___$years[1] & year <= ___$years[2])
p <- ggplot(data, aes(gdpPercap, lifeExp)) +
geom_point(size = input$size, col = input$color) +
scale_x_log10() +
ggtitle(input$title)
if (input$fit) {
p <- p + geom_smooth(method = "lm")
}
p
})
}
shinyApp(ui = ui, server = server)