2015-04-29 16 views
6

Questo mi ha frustrato. Anche con lubridate non riesco a ottenere le date per mantenere il loro tipo quando eseguo il loop su di esse. Per esempio:La data di scadenza in R perde il formato

require(lubridate) 
yearrange = ymd(20110101) + years(seq(4)) 
yearrange 
#[1] "2012-01-01 UTC" "2013-01-01 UTC" "2014-01-01 UTC" "2015-01-01 UTC" 
class(yearrange) 
#[1] "POSIXct" "POSIXt" 

Tuttavia, se cerco di collegare attraverso anni (la creazione di un terreno separato per ogni anno nel mio set di dati): perdo la formattazione dell'anno, e avrebbe dovuto ri-lanciare la dati

for (yr in yearrange) { show(yr) } 
#[1] 1325376000 
#[1] 1356998400 
#[1] 1388534400 
#[1] 1420070400 

Se io ciclo però specificando gli indici, ottengo la data oggetti posteriore:

for (i in seq(length(yearrange))) { show(yearrange[i]) } 
#[1] "2012-01-01 UTC" 
#[1] "2013-01-01 UTC" 
#[1] "2014-01-01 UTC" 
#[1] "2015-01-01 UTC" 

c'è un modo semplice per evitare l'opti indicizzato acceso, senza usare foreach, o è l'unico modo?

risposta

7

Prova questa

for (yr in as.list(yearrange)) { show(yr) } 

penso for (yr in yearrange) costringe yearrange in un vettore e POSIXct non è uno dei tipi supportati quel vettore costringe in.

+0

Grazie. Questo risolve il mio problema. Lo implementerò anche come funzione invece di un ciclo 'for', quindi probabilmente trarrò vantaggio anche dalla soluzione @thelatemail – beroe

2

lapply non sembrano avere lo stesso problema, per es .:

for (x in yearrange) plot(1, main=x) 
#Main title = 1420070400 
lapply(yearrange, function(x) plot(1, main=x)) 
#Main title = 2015-01-01 
+2

Sì, perché usa' as.list (X) ', dove' X = yearrange'. Puoi vederlo quando controlli il codice sorgente di 'lapply'. – cryo111

+0

Ho intenzione di creare una funzione per generare i miei diagrammi anziché il ciclo, quindi userò anche la tua risposta, sebbene l'altra più direttamente risolva la mia frustrazione. Grazie. – beroe