r - 在 Shiny 中互连 slider 和数字输入

标签 r shiny

我想要一个用于快速、视觉输入的 slider ,但也需要一个用于精确计算的相应数字输入。我已经成功地系好了 slider valueinput$ ,因此它们将遵循数字输入中写入的任何内容。但是,我似乎无法让它反过来工作。

用户界面

    numericInput("num_l",
                 label = "Beam length in m.",
                 value = 10),

    numericInput("num_a",
                 label = "Choose position, where to apply force, starting from left, in m.",
                 value = input$slider_a), # THIS DOESN'T WORK

    numericInput("num_x",
                 label = "Calculate the deflection, at position starting from left, in m.",
                 value = input$slider_x), # NEITHER DOES THIS

服务器
output$slider <- renderUI({
    tagList( # Need this for multiple reactive sliders
        sliderInput("slider_a",
                    label = "Load force position:",
                    min = 0,
                    max = input$num_l,
                    value = input$num_a, # THIS WORKS
                    step = 0.1),

        sliderInput("slider_x",
                    label = "Deflection calculation position:",
                    min = 0,
                    max = input$num_l,
                    value = input$num_x, # THIS ALSO WORKS
                    step = 0.1)
    )
})

最佳答案

使用更新函数:

ui <- fluidPage(

      numericInput("num_i",
                   label = "my input:",
                   value = 4,
                   min = 0,
                   max = 10),

      sliderInput("num_s",
                  label = "my slider:",
                  value = 4,
                  min = 0,
                  max = 10)
    )


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

      observe({

        updateSliderInput(
          session = session,
          inputId = "num_s",
          value = input$num_i
        )
      })


      observe({

        updateSliderInput(
          session = session,
          inputId = "num_i",
          value = input$num_s
        )
      })
    }


shinyApp(ui, server)

但是,它可能会导致一些问题,因为数字输入的更新会触发更新 slider ,反之亦然。我注意到可能会遇到无限循环。我不知道如何解决这个问题,所以我将等待更高级的 Shiny 开发人员的其他答案。

该问题的一种可能解决方案如下:使用 jQuery 函数更新输入控件。使用服务器端的标准观察者更新 slider 。但是,使用 jQuery 更新控件不会反射(reflect)在服务器上,更新仅在客户端(Web 浏览器)中生效。这似乎不是问题,因为您可以跟踪 slider 并在应用程序代码中使用它的值。第二个控件仅用于显示目的。

所以,写一个这样的jQuery函数:
$('document').ready(function(){
  $('#num_s').change(function(){
    var new_val = $(this).val();
    $('#num_i').val(new_val);
  });
});

将其保存在 www 文件夹中,然后使用 includeScript() 将文件包含在您的应用程序中。

关于r - 在 Shiny 中互连 slider 和数字输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017491/

相关文章:

r - Shiny 的 R markdown 中的多个 css 样式

r - 如何使用 R 中的 purrr::map 函数从多个 tidymodels 对象中提取模型摘要?

r - 逻辑测试对象是否是目录

r - 如何在 R 中创建类数组?

r - 如何根据 shinymanager 凭据禁用 Shiny 功能

css - 自定义标题栏 Shiny

r - 对 geom_col 条形图进行排序或排序 R

r - 插值年中平均值

css - R Shiny : Reduce bottom padding shiny dashboard box

css - Shiny 的布局 : Build a shiny page with a scrollable panel and a panel that remains fixed