闪亮的滑块输入显示重复值
Posted
技术标签:
【中文标题】闪亮的滑块输入显示重复值【英文标题】:Shiny sliderInput showing duplicate values 【发布时间】:2022-01-15 06:07:54 【问题描述】:我对@987654324@ 有疑问。在我的应用程序中,当用户加载数据 (actionBTTN
) 时,我的 sliderInput
的年份会根据该数据更新(使用 updateSliderInput
)。但我注意到,对于包含几年 (4-5) 的数据,sliderInput
会显示重复的年份。我还注意到,它似乎只在我的屏幕尺寸更大时才会发生。
以下是小窗口的外观: no duplicated year values, how I would like it to be in the app 这是使用更大窗口时的外观: duplicated year values
这是我的应用程序示例:
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
# initial input with no years selected, it will update once data is loaded
sliderInput(
inputId = "years",
label = "Choose a time range:",
min = 0, max = 1,
value = c(0,1),
#dragRange = TRUE,
step = 1,
sep = ''
),
actionBttn(
inputId = "load_data",
label = "Get data!",
color = "primary",
style = "fill",
icon = icon("arrow-alt-circle-down"),
size = "xs",
block = TRUE
)
),
mainPanel()
)
)
server = function(input, output, session)
observeEvent(input$load_data,
mydata <- data.frame(numbers = c(1:5), year = c(2010:2014))
minim = min(mydata$year)
maxim = max(mydata$year)
updateSliderInput(session, inputId = "years",
min = minim, max = maxim,
value = c(minim, maxim),
# calculate step dynamically (@Isa's idea)
step = seq(minim, maxim, length.out = length(mydata$year))[2] - seq(minim, maxim, length.out = length(mydata$year))[1])
)
shinyApp(ui, server)
我已经尝试更改 step
和 sep
参数,还将 mydata$year
设置为整数。有没有人遇到过同样的问题?
欢迎所有帮助。
谢谢:)
【问题讨论】:
这可能是updateSliderInput()
中的一个错误,如问题#2398 中所述
谢谢!我会看的。但正如 2019 年报道的那样,我不认为他们目前正在研究它。但很高兴知道!
请尝试 alandipert 在该链接中的解决方法。
【参考方案1】:
也许这就是你所期待的
mydata <- data.frame(numbers = c(1:6), year = c(2010:2015))
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
# initial input with no years selected, it will update once data is loaded
sliderInput(
inputId = "years",
label = "Choose a time range:",
min=0, max=1,
value = 0,
dragRange = TRUE,
step = seq(0, 1, length.out = length(mydata$year))[2] - seq(0, 1, length.out = length(mydata$year))[1],
# step = 0.2, # Above step calculates dynamically
sep = ''
),
actionBttn(
inputId = "load_data",
label = "Get data!",
color = "primary",
style = "fill",
icon = icon("arrow-alt-circle-down"),
size = "xs",
block = TRUE
)
),
mainPanel()
)
)
server = function(input, output, session)
observeEvent(input$load_data,
min = min(mydata$year)
max = max(mydata$year)
updateSliderInput(session, inputId = "years",
min = min, max = max,
value = min, step = 1)
)
shinyApp(ui, server)
updateSliderInput
重复值背后的原因是,当参数 ticks
作为 TRUE
传递时,在 ui
对象中填充 sliderInput
生成的刻度数。
在sliderInput
的场景代码后面为刻度数:
range <- max - min
if (ticks)
n_steps <- range/step
scale_factor <- ceiling(n_steps/10)
n_ticks <- n_steps/scale_factor
else
n_ticks <- NULL
您可以通过将光标保持在功能上并在窗口中按 f2 来检查任何功能的整体工作情况。
因此,如果我们希望这些值不重复,那么刻度数应该等于所考虑变量的不同值的数量。
【讨论】:
嗨@Isa,谢谢!这有很大帮助。问题是mydata
在选择后被加载,所以它只在“服务器端”可用(我的数据在reactiveVlaues
中)。我编辑了我的代码来表示它。我像你一样计算了这些步骤,但是在updateSliderInput
内它不起作用。刻度没有正确标记年份以上是关于闪亮的滑块输入显示重复值的主要内容,如果未能解决你的问题,请参考以下文章