根据 selectInput 值更新滑块范围值
update slider range value based on selectInput value
我有一个带有闪亮应用程序的 flexdashboard。我想根据 "agecat" 中的 select 输入值更新名为 "agerange" 的 sliderInput 的 value
。使用下面的代码,当我 select 年龄 20-24 类别时,我可以获得 selected 范围的下限值从 15 变为 20,但上限值保持 99 并且不会改变到 20.
---
title: "test"
output:
flexdashboard::flex_dashboard:
theme: bootstrap
runtime: shiny
---
```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
```
```{r global, include=FALSE}
set.seed(1)
dat <- data.frame(age = sample(15:99, 100, replace=TRUE),
y = runif(100))
```
Sidebar {.sidebar}
=====================================
```{r}
# age
sliderInput("agerange", label = "Age",
min = 15,
max = 99,
value = c(15, 99),
step=10)
# age category
selectInput("agecat", label = "Age Category",
choices = list("All" = 1,
"15-19" = 2,
"20-24" = 3),
selected = 1)
observe({
updateSliderInput(session, "agerange",
value = ifelse(input$agecat==2, c(15,19),
ifelse(input$agecat==3, c(20,24),
input$agerange)))
})
```
Page 1
=====================================
Column
-----------------------------------------------------------------------
### Chart A
```{r}
renderPlot({
dat %>%
filter(age >= input$agerange[1] & age <= input$agerange[2]) %>%
ggplot(., aes(y)) +
geom_histogram()
})
```
主要问题是 ifelse
只返回一个值(由于条件大小 input$agecat
)而不是两个值。在下面的代码中,我创建了一个具有默认值的新变量 range
并根据 observeEvent
进行更改
---
title: "test"
output:
flexdashboard::flex_dashboard:
theme: bootstrap
runtime: shiny
---
```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
```
```{r global, include=FALSE}
set.seed(1)
dat <- data.frame(age = sample(15:99, 100, replace=TRUE),
y = runif(100))
```
Sidebar {.sidebar}
=====================================
```{r}
# age
sliderInput("agerange", label = "Age",
min = 15,
max = 99,
value = c(15, 99),
step=10)
# age category
selectInput("agecat", label = "Age Category",
choices = list("All" = 1,
"15-19" = 2,
"20-24" = 3),
selected = 1)
observeEvent(input$agecat,{
range = c(15,99)
if(input$agecat == 2) {
range = c(15,19)
}
else if(input$agecat == 3) {
range = c(20,24)
}
else {
input$agecat
}
updateSliderInput(session, "agerange",
value = range,
min = min(range),
max = max(range),
step = 1)
})
```
Page 1
=====================================
Column
-----------------------------------------------------------------------
### Chart A
```{r}
renderPlot({
dat %>%
filter(age >= input$agerange[1] & age <= input$agerange[2]) %>%
ggplot(., aes(y)) +
geom_histogram()
})
```
我有一个带有闪亮应用程序的 flexdashboard。我想根据 "agecat" 中的 select 输入值更新名为 "agerange" 的 sliderInput 的 value
。使用下面的代码,当我 select 年龄 20-24 类别时,我可以获得 selected 范围的下限值从 15 变为 20,但上限值保持 99 并且不会改变到 20.
---
title: "test"
output:
flexdashboard::flex_dashboard:
theme: bootstrap
runtime: shiny
---
```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
```
```{r global, include=FALSE}
set.seed(1)
dat <- data.frame(age = sample(15:99, 100, replace=TRUE),
y = runif(100))
```
Sidebar {.sidebar}
=====================================
```{r}
# age
sliderInput("agerange", label = "Age",
min = 15,
max = 99,
value = c(15, 99),
step=10)
# age category
selectInput("agecat", label = "Age Category",
choices = list("All" = 1,
"15-19" = 2,
"20-24" = 3),
selected = 1)
observe({
updateSliderInput(session, "agerange",
value = ifelse(input$agecat==2, c(15,19),
ifelse(input$agecat==3, c(20,24),
input$agerange)))
})
```
Page 1
=====================================
Column
-----------------------------------------------------------------------
### Chart A
```{r}
renderPlot({
dat %>%
filter(age >= input$agerange[1] & age <= input$agerange[2]) %>%
ggplot(., aes(y)) +
geom_histogram()
})
```
主要问题是 ifelse
只返回一个值(由于条件大小 input$agecat
)而不是两个值。在下面的代码中,我创建了一个具有默认值的新变量 range
并根据 observeEvent
---
title: "test"
output:
flexdashboard::flex_dashboard:
theme: bootstrap
runtime: shiny
---
```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
```
```{r global, include=FALSE}
set.seed(1)
dat <- data.frame(age = sample(15:99, 100, replace=TRUE),
y = runif(100))
```
Sidebar {.sidebar}
=====================================
```{r}
# age
sliderInput("agerange", label = "Age",
min = 15,
max = 99,
value = c(15, 99),
step=10)
# age category
selectInput("agecat", label = "Age Category",
choices = list("All" = 1,
"15-19" = 2,
"20-24" = 3),
selected = 1)
observeEvent(input$agecat,{
range = c(15,99)
if(input$agecat == 2) {
range = c(15,19)
}
else if(input$agecat == 3) {
range = c(20,24)
}
else {
input$agecat
}
updateSliderInput(session, "agerange",
value = range,
min = min(range),
max = max(range),
step = 1)
})
```
Page 1
=====================================
Column
-----------------------------------------------------------------------
### Chart A
```{r}
renderPlot({
dat %>%
filter(age >= input$agerange[1] & age <= input$agerange[2]) %>%
ggplot(., aes(y)) +
geom_histogram()
})
```