SliderInput brillante que muestra valores duplicados
Tengo un problema con sliderInput
. En mi aplicación, cuando un usuario carga datos (actionBTTN
), los años de mi sliderInput
se actualizan (con updateSliderInput
) según esos datos. Pero he notado que para datos que contienen pocos años (4-5), el sliderInput
muestra años repetidos. También he notado que esto parece ocurrir solo cuando el tamaño de mi pantalla es más grande.
Así es cómo se ve con una ventana de tamaño pequeño: no se repiten los valores de los años, como me gustaría que estuviera en la aplicación. Y así es cómo se ve con una ventana más grande: valores duplicados de los años.
Aquí tienes un ejemplo de mi aplicación:
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
# input inicial sin años seleccionados, se actualizará una vez que se carguen los datos
sliderInput(
inputId = "years",
label = "Elige un rango de tiempo:",
min = 0, max = 1,
value = c(0,1),
#dragRange = TRUE,
step = 1,
sep = ''
),
actionBttn(
inputId = "load_data",
label = "¡Obtener datos!",
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),
# calcular el paso dinámicamente (idea de @Isa)
step = seq(minim, maxim, length.out = length(mydata$year))[2] - seq(minim, maxim, length.out = length(mydata$year))[1])
})
}
shinyApp(ui, server)
Ya he intentado cambiar los argumentos step
y sep
, también he configurado mydata$year
como un número entero. ¿Alguien ha encontrado el mismo problema? Cualquier ayuda es bienvenida.
¡Gracias! 🙂
davy.ai
Solución para valores de año duplicados en sliderInput
El problema con valores de año duplicados en
sliderInput
es causado por el argumentolength.out
dentro de la funciónseq
utilizado para calcular el tamaño del paso. En casos donde lalongitud
de los datos es pequeña, este argumento puede producir valores repetidos en la secuencia, lo que lleva a años duplicados en el slider.Para solucionar este problema, reemplaza la función
seq
dentro deupdateSliderInput
con la funciónseq_along
. Esto creará una secuencia de valores únicos correspondientes a la longitud de los datos.Aquí está el código actualizado:
El argumento
tickInterval
establece la distancia entre cada marca de división en el slider, y el argumentolabels
establece el texto que se mostrará junto a cada marca.Con estos cambios,
sliderInput
siempre mostrará valores de año únicos, independientemente del tamaño de los datos o de la pantalla.