我很擅长闪亮,但我没有找到解决方案来做我想做的事。
我的目标是为动态创建的选择字段(selectInput)设置上一个/下一个按钮(我需要这个用于未来的开发,因为选择将随数据集的变化而变化)。
我从这篇文章中激励自己Add back/next button to date range input in shiny。
但是我无法在我的情况下做同样的事情。
这是我尝试的一个简单示例(目标是将其应用于更复杂的数据集)。
library(shiny)
vector_choices <- seq(5, 50, by = 5)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("selector"),
tags$div(class="row",
tags$div(uiOutput("prevBin")),
tags$div(uiOutput("nextBin")))
),
mainPanel(
textOutput("text"),
plotOutput("distPlot")
)
)
)
server <- function(input, output, session) {
output$selector <- renderUI({
selectInput("bins",
"Bins",
choices = as.list(vector_choices),
selected = 25)
})
output$prevBin <- renderUI({
actionButton("prevBin",
label = "Previous")
})
output$nextBin <- renderUI({
actionButton("nextBin",
label = "Next")
})
observeEvent(input$prevBin, {
current <- which(vector_choices == input$bins)
if(current > 1){
updateSelectInput(session, "bins",
choices = as.list(vector_choices),
selected = vector_choices[current - 1])
}
})
observeEvent(input$nextBin, {
current <- which(vector_choices == input$bins)
if(current < length(vector_choices)){
updateSelectInput(session, "bins",
choices = as.list(vector_choices),
selected = vector_choices[current + 1])
}
})
output$distPlot <- renderPlot({
x <- rnorm(100)
bins <- seq(min(x), max(x), length.out = as.numeric(input$bins))
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
}
shinyApp(ui = ui, server = server)
如果有人遇到这个问题,或者是一位有光泽的专家,可以指出我正确的方向,我们将不胜感激。
由于
编辑:我根据BigDataScientist的答案更正了代码,并为列表的第一次和最后一次出现添加了条件。答案 0 :(得分:2)
你很亲密。
您要更新selectInput()
而不是renderUI()
创建selectInput()
的{{1}}
因此请将updateSelectInput()
"selector"
替换为"bins"
:
updateSelectInput(session, "bins", choices = vector_choices,
selected = vector_choices[current - 1])