使用带范围的 updateSliderInput 更新 Shiny sliderInput
Updating Shiny sliderInput using updateSliderInput with range
我有一个 sliderInput
(接收器),我想从另一个 sliderInput
(控制器)更新它。当我只为 updateSliderInput
中的值参数传递一个输入时,我的代码可以工作,但是如果我为来自接收器的范围传递一个向量,它就不起作用。
在下面的代码中,我提供了有效和无效的滑块。我怎样才能让 updateSliderInput
接受一个范围值的向量?
library(shiny)
shinyApp(
ui <- fluidPage(
fluidRow(
column(4, sliderInput("controller", "Controller:", min = 0, max = 50, value = c(10,20)))
,column(4, sliderInput("receiver1", "Receiver 1 - Works with 1 value input", min=0, max=20, value=10, step=1))
,column(4, sliderInput("receiver2", "Receiver 2 - Doesn't work with 2 values in a vector", min=0, max=20, value=10, step=1))
)
,fluidRow(column(4, verbatimTextOutput("range1")))
,fluidRow(column(4, verbatimTextOutput("range2")))
)
,server <- function(input, output, session) {
observe({
updateSliderInput(session = session, "receiver1", value = c(input$controller[1]), min = 0, max = 100)
updateSliderInput(session = session, "receiver2", value = c(input$controller[1],input$controller[2]), min = 0, max = 100)
})
output$range1 <- renderPrint({input$controller[1]})
output$range2 <- renderPrint({input$controller[2]})
}
)
您在 ui
中为 receiver1
和 receiver2
提供了一个值,因此它们在 updateSliderInput
中只接受一个值。如果你在 receiver2
中放置一个包含两个值的向量,它将接受 updateSliderInput
.
中 controller
的两个值
library(shiny)
shinyApp(
ui <- fluidPage(
fluidRow(
column(4, sliderInput("controller", "Controller:", min = 0, max = 50, value = c(10,20)))
,column(4, sliderInput("receiver1", "Receiver 1 - Works with 1 value input", min=0, max=20, value=10, step=1))
,column(4, sliderInput("receiver2", "Receiver 2 - Doesn't work with 2 values in a vector", min=0, max=20, value=c(0, 10), step=1))
)
,fluidRow(column(4, verbatimTextOutput("range1")))
,fluidRow(column(4, verbatimTextOutput("range2")))
)
,server <- function(input, output, session) {
observe({
updateSliderInput(session = session, "receiver1", value = c(input$controller[1]), min = 0, max = 100)
updateSliderInput(session = session, "receiver2", value = c(input$controller[1],input$controller[2]), min = 0, max = 100)
})
output$range1 <- renderPrint({input$controller[1]})
output$range2 <- renderPrint({input$controller[2]})
}
)
我有一个 sliderInput
(接收器),我想从另一个 sliderInput
(控制器)更新它。当我只为 updateSliderInput
中的值参数传递一个输入时,我的代码可以工作,但是如果我为来自接收器的范围传递一个向量,它就不起作用。
在下面的代码中,我提供了有效和无效的滑块。我怎样才能让 updateSliderInput
接受一个范围值的向量?
library(shiny)
shinyApp(
ui <- fluidPage(
fluidRow(
column(4, sliderInput("controller", "Controller:", min = 0, max = 50, value = c(10,20)))
,column(4, sliderInput("receiver1", "Receiver 1 - Works with 1 value input", min=0, max=20, value=10, step=1))
,column(4, sliderInput("receiver2", "Receiver 2 - Doesn't work with 2 values in a vector", min=0, max=20, value=10, step=1))
)
,fluidRow(column(4, verbatimTextOutput("range1")))
,fluidRow(column(4, verbatimTextOutput("range2")))
)
,server <- function(input, output, session) {
observe({
updateSliderInput(session = session, "receiver1", value = c(input$controller[1]), min = 0, max = 100)
updateSliderInput(session = session, "receiver2", value = c(input$controller[1],input$controller[2]), min = 0, max = 100)
})
output$range1 <- renderPrint({input$controller[1]})
output$range2 <- renderPrint({input$controller[2]})
}
)
您在 ui
中为 receiver1
和 receiver2
提供了一个值,因此它们在 updateSliderInput
中只接受一个值。如果你在 receiver2
中放置一个包含两个值的向量,它将接受 updateSliderInput
.
controller
的两个值
library(shiny)
shinyApp(
ui <- fluidPage(
fluidRow(
column(4, sliderInput("controller", "Controller:", min = 0, max = 50, value = c(10,20)))
,column(4, sliderInput("receiver1", "Receiver 1 - Works with 1 value input", min=0, max=20, value=10, step=1))
,column(4, sliderInput("receiver2", "Receiver 2 - Doesn't work with 2 values in a vector", min=0, max=20, value=c(0, 10), step=1))
)
,fluidRow(column(4, verbatimTextOutput("range1")))
,fluidRow(column(4, verbatimTextOutput("range2")))
)
,server <- function(input, output, session) {
observe({
updateSliderInput(session = session, "receiver1", value = c(input$controller[1]), min = 0, max = 100)
updateSliderInput(session = session, "receiver2", value = c(input$controller[1],input$controller[2]), min = 0, max = 100)
})
output$range1 <- renderPrint({input$controller[1]})
output$range2 <- renderPrint({input$controller[2]})
}
)