Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shining updateSliderInput:将双端滑块转换为单端滑块_R_Shiny_Slider - Fatal编程技术网

Shining updateSliderInput:将双端滑块转换为单端滑块

Shining updateSliderInput:将双端滑块转换为单端滑块,r,shiny,slider,R,Shiny,Slider,我有一个双端闪亮滑块输入,如下所示: sliderInput(inputId = "years", label="Choose base year and target year", min = 2015, max = 2060, value = c(2015,206

我有一个双端闪亮滑块输入,如下所示:

sliderInput(inputId = "years",
                             label="Choose base year and target year",
                             min = 2015,
                             max = 2060,
                             value = c(2015,2060),
                             step = 1,
                             sep = ""
                 )
在用户上传一个值后,我想将滑块的下端固定到某个值;上端仍应可移动。我试图通过使用updateSliderInput函数来实现这一点,并且只为“value”属性提供一个值(因此,滑块应该成为常规的单端滑块):

然而,这是行不通的;滑块仍然是双端的,两个控制柄都设置为2060。如何将双端滑块转换为常规滑块

亲切问候,


Requin

这里有另一个更接近您的问题的解决方案,按下按钮后仅触发一次:

library(shiny)

ui <- fluidPage(
  uiOutput("Slider_UI"),
  conditionalPanel("input.fixLower == 0", {actionButton("fixLower", "Fix lower range")})
)

server <- function(input, output, session) {

  fixedLower <- reactiveVal()

  observeEvent(input$fixLower, {
    fixedLower(min(isolate({input$years})))
  }, once = TRUE)

  output$Slider_UI <- renderUI({
    if(is.null(fixedLower())){
      sliderInput(inputId = "years",
                  label="Choose base year and target year",
                  min = 2015,
                  max = 2060,
                  value = c(2015, 2060),
                  step = 1,
                  sep = ""
      )
    } else {
      sliderInput(inputId = "years",
                  label="Choose base year and target year",
                  min = fixedLower(),
                  max = 2060,
                  value = fixedLower(),
                  step = 1,
                  sep = ""
      )
    }
  })

}

shinyApp(ui = ui, server = server)

下面是另一个更接近您的问题的解决方案,按下按钮后仅触发一次:

library(shiny)

ui <- fluidPage(
  uiOutput("Slider_UI"),
  conditionalPanel("input.fixLower == 0", {actionButton("fixLower", "Fix lower range")})
)

server <- function(input, output, session) {

  fixedLower <- reactiveVal()

  observeEvent(input$fixLower, {
    fixedLower(min(isolate({input$years})))
  }, once = TRUE)

  output$Slider_UI <- renderUI({
    if(is.null(fixedLower())){
      sliderInput(inputId = "years",
                  label="Choose base year and target year",
                  min = 2015,
                  max = 2060,
                  value = c(2015, 2060),
                  step = 1,
                  sep = ""
      )
    } else {
      sliderInput(inputId = "years",
                  label="Choose base year and target year",
                  min = fixedLower(),
                  max = 2060,
                  value = fixedLower(),
                  step = 1,
                  sep = ""
      )
    }
  })

}

shinyApp(ui = ui, server = server)

您使用
renderUI
和“uiOutput”归档该文件是否有效?可能也有兴趣。使用
renderUI
和“uiOutput”来归档是否有效?可能也有兴趣。很好的解决方案。OP,如果您想保留这些值,请考虑使用
reactiveValues
good solution存储它们。OP,如果您想保留这些值,请考虑使用
reactiveValues
library(shiny)

ui <- fluidPage(
  radioButtons(inputId="type_select", label="Select slider type", choices = list("Standard slider", "Range slider")),
  uiOutput("Slider_UI")
)

server <- function(input, output, session) {

  output$Slider_UI <- renderUI({
    req(input$type_select)

    if(input$type_select == "Range slider"){
      presetValues <- c(2015, 2060)
    } else {
      presetValues <- 2060
    }

    sliderInput(inputId = "years",
                label="Choose base year and target year",
                min = 2015,
                max = 2060,
                value = presetValues,
                step = 1,
                sep = ""
    )
  })

}

shinyApp(ui = ui, server = server)