我正在开发一个应用程序,它根据用户选择他们想要过滤特定数据集的指标,动态地将一组UI元素(当前是滑块)呈现为三列。我遇到的问题是,不同的指标具有极其可变的范围(即商品总销售额与客户退货率),这意味着滑块不是最佳的。我想知道你是否有人知道数字范围输入可以采取两个数字输入(最小和最大)类似于范围滑块的末端?我无法使用此功能找到Shiny内置的东西,但我希望你们中的一个人可能有一些自定义输入元素的经验。任何帮助将不胜感激。请参阅下文,了解演示动态滑块生成的代码段。
谢谢!
output$filters <- renderUI({
if (input$geoselect == "US") {
atts <- tolower(input$ucolselect)
if(length(input$ucolselect) >= 3) {
fluidRow(column(width = 4, lapply(1:round(
1 / 3 * length(atts)
), function(i) {
sliderInput(
inputId = atts[i],
label = atts[i],
min = min(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE),
max = max(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE)
,
value = c(min(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE), max(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE)),
step = NULL
)
})),
column(width = 4,
lapply((1 + round(1 / 3 * length(atts))):round(2 / 3 * length(atts)), function(i) {
sliderInput(
inputId = atts[i],
label = atts[i],
min = min(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE),
max = max(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE)
,
value = c(min(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE), max(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE)),
step = NULL
)
})),
.....
答案 0 :(得分:1)
numericRangeInput()
(https://github.com/dreamRs/shinyWidgets/pull/150)中刚刚添加了一个名为shinyWidgets
的功能。它不在CRAN上,但是您可以从GitHub安装开发版本。
devtools::install_github("dreamRs/shinyWidgets")
output$filters <- renderUI({
if (input$geoselect == "US") {
atts <- tolower(input$ucolselect)
if (length(input$ucolselect) >= 3) {
fluidRow(column(width = 4, lapply(1:round(
1 / 3 * length(atts)
), function(i) {
numericRangeInput(
inputId = atts[i],
label = atts[i],
value = c(min(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE), max(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE))
)
})),
column(width = 4,
lapply((1 + round(1 / 3 * length(atts))):round(2 / 3 * length(atts)), function(i) {
numericRangeInput(
inputId = atts[i],
label = atts[i],
value = c(min(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE), max(us[, tolower(colnames(us)) %in% atts[i]], na.rm = TRUE))
)
})),
更新:numericRangeInput()
现在位于shinyWidgets
0.4.5中的CRAN上
答案 1 :(得分:0)
为什么不numericInput
?这还包括最小值,最大值和步长值。但据我所知,您可以输入大于最大值或小于最小值的值,因此最好在服务器上使用updateNumericInput()
管理它,并在代码中以min:max范围返回值。希望我明白你的意思,这将有所帮助。