将滑块输入值设置为闪亮字符

Set sliderInput values as characters in shiny

本文关键字:字符 设置 输入      更新时间:2023-09-26

我的闪亮应用程序有一个sliderInput,但想将值替换为字符标签。我该如何实现它?感谢您的任何建议。

这是我的示例代码:

library(shiny)
values <- as.factor(c('Label 1', 'Label 3', 'Label 3'))
ui <- shinyUI(bootstrapPage(
    headerPanel("test"),
    sliderInput("foo", "Animation duration", 
                min = 1,
                max = length(values), 
                value = values)
))
server <- shinyServer(function(input, output, session) {
})
shinyApp(ui = ui, server = server)

这可以在 shiny 中使用 sliderTextInput 函数轻松完成。无需添加所有这些复杂的js函数。只需几行代码即可解决问题。安装包含滑块文本输入函数的 shinywidgets 包。执行以下操作:

  sliderTextInput("foo","Animation Duration" , 
                  choices = c("Label 1", "Label 3", "Label 3"), 
                  selected = c("Label 1", "Label 3", "Label 3"), #incase you want all values by default 
                  animate = FALSE, grid = FALSE, 
                  hide_min_max = FALSE, from_fixed = FALSE,
                  to_fixed = FALSE, from_min = NULL, from_max = NULL, to_min = NULL,
                  to_max = NULL, force_edges = FALSE, width = NULL, pre = NULL,
                  post = NULL, dragRange = TRUE)

感谢@daattli为我指出正确的方向,并让我知道如何使用js来更改闪亮的元素。

我已经实现了一个解决方案来更改sliderInput标签和一个selectInput来切换不同的值(和长度)。我认为这个功能应该实现到使用 ionRangeSlider 的 shiny 中。

如果您认为有更好的实现方法,请改进我的代码,因为这是我的第一个js脚本。

library(shiny)
values <- list(A = c('A1', 'A2', 'A3'),
               B = c('B1', 'B2', 'B3', 'B4'))
ui <- shinyUI(bootstrapPage(
    selectInput('selection', 'selection', c('A',  'B'), 'A'),
    uiOutput('selectUI'),
    sliderInput(inputId = "target", label = "Target",
                min = 0, max = length(values$A) - 1,
                step = 1,
                value = length(values$A) - 1),
    verbatimTextOutput('summary')
))
server <- shinyServer(function(input, output, session) {
    output$summary <- renderPrint({
        print(input$target)
        print(values[[input$selection]][input$target + 1])
    })
    output$selectUI <- renderUI({
        sel_values <- paste(paste0('"', values[[input$selection]], '"'), collapse = ',')
        print(sel_values)
        list(
            (HTML(
                sprintf('
                        <script type="text/javascript">
                        $(document).ready(function() {
                        var vals = [%s];
                        $(''#target'').data(''ionRangeSlider'').update(
                        {values:vals,
                        min: 0,
                        max: %s,
                        from:%s})
                        })
                        </script>
                        ', sel_values, 
                        length(values[[input$selection]]) - 1,
                        length(values[[input$selection]]) - 1)))
        )}
    )}
)
shinyApp(ui = ui, server = server)