2016-06-07 27 views
6

Sto scrivendo un lucido e ho voluto un cursore per la data. La data nei miei dati è mensile e vorrei fare un passo avanti di un mese alla volta. Il docs per l'input del cursore dice che il valore del passo è in secondi o giorni a seconda dei tipi di parametro min/max. Attualmente ho:Scorrimento del cursore Shiny per mese

sliderInput("slider", "Time", min=as.Date("2005-01-01"), 
           max=as.Date("2014-12-01"), 
           value=as.Date("2005-01-01"), step = 30,...) 

Voglio essere in grado di intervenire per mese invece che di giorno, ma non sembra possibile da quello che mi danno. C'è un frammento di js che potrei aggiungere che mi avrebbe dato questa funzionalità?

Nota di chiarimento: Ho letto i documenti per questa funzione e, a mio avviso, non ci sono funzionalità di base per questo. Il parametro del formato dell'ora, al momento del test, modifica solo le etichette e non i valori. Ho visto un paio di post che accedono ai valori di alcuni widget e mi chiedevo se fosse possibile. Eg)

<script type="text/javascript"> 
    $(document).ready(function() { 
    var slider = $("#slider").slider(); 
// override the default "nice" function. 
    slider.nice = function(value) { 
    var ref_date = new Date("2005-01-01"); 
// each slider step is 1 day, translating to 24 * 3600 * 1000 milliseconds 
    var slider_date = new Date(ref_date.getTime() + value * 24 * 3600 * 1000); 
          return [slider_date.getUTCFullYear(), 
          slider_date.getUTCMonth() + 1, 
          slider_date.getUTCDate()].join("-"); 
          } 
          }) 
+0

Perché non utilizzare il 'dateInput' controllo? –

+0

errata lettura della domanda: aggiornerò la mia risposta entro il mese – SymbolixAU

+1

@MikeWise perché vorrei usare l'opzione di animazione che il cursore fornisce – Marsenau

risposta

9

C'è una funzione timeFormat all'interno del sliderInput. Per maggiori informazioni visita Slider Input Widget.

EDIT:

Per ottenere le date fuori e li usano più tardi nella vostra analisi, molto merito va a questa domanda First day of the month from a POSIXct date time using lubridate e la funzione fornita da Roland.

rm(list=ls()) 
library(shiny) 
monthStart <- function(x) { 
    x <- as.POSIXlt(x) 
    x$mday <- 1 
    as.Date(x) 
} 
ui <- basicPage(sliderInput("slider", "Time", min = as.Date("2010-01-01"),max =as.Date("2014-12-01"),value=as.Date("2014-12-01"),timeFormat="%b %Y"), 
       textOutput("SliderText") 
       ) 
server <- shinyServer(function(input, output, session){ 

    sliderMonth <- reactiveValues() 
    observe({ 
    full.date <- as.POSIXct(input$slider, tz="GMT") 
    sliderMonth$Month <- as.character(monthStart(full.date)) 
    }) 
    output$SliderText <- renderText({sliderMonth$Month}) 
}) 
shinyApp(ui = ui, server = server) 

enter image description here

+2

Questo non mi dà funzionalità di stepping mensile. Cambia solo le etichette sul cursore per essere equivalente al parametro di formato. L'ho provato e la data avanza ancora per step se fornita e di giorno se non. – Marsenau

+2

@ user2864849 vedere la modifica –

+0

Ben fatto, grazie! – Stophface