2015-04-29 15 views
6

Dies hat mich frustriert. Selbst mit lubridate kann ich keine Daten erhalten, um ihren Typ beizubehalten, wenn ich über sie hinwegschlinge. Zum Beispiel:Looping-Datum in R verliert Format

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" 

Wenn ich jedoch eine Schleife über Jahre versuchen (ein separates Grundstück für jedes Jahr in meinem Datensatz erstellen): verliere ich die Formatierung des Jahres, und würde wieder werfen muß die Daten

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

Wenn ich Schleife Indizes obwohl die Angabe, ich Datum erhalten Objekte zurück:

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" 

gibt es einen einfachen Weg, um die indizierte opti zu vermeiden an, ohne foreach zu verwenden, oder ist das der einzige Weg?

Antwort

7

Versuchen Sie, diese

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

Ich denke for (yr in yearrange)yearrange in einen Vektor coerces und POSIXct ist nicht einer der unterstützten Typen, die Vektor in nötigt.

+0

Dank. Dies löst mein Problem. Ich werde es auch als eine Funktion anstelle einer 'for'-Schleife implementieren, so wird wahrscheinlich @thelatemail Lösung auch zu nutzen – beroe

2

lapply scheint nicht das gleiche Problem zu haben, z.B .:

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

Ja, weil es' as.list (X) 'verwendet, wobei' X = yearrange'. Sie können es sehen, wenn Sie den Quellcode von 'lapply' überprüfen. – cryo111

+0

Ich werde eine Funktion erstellen, um meine Plots statt Schleifen zu generieren, so wird Ihre Antwort auch verwenden, obwohl der andere mehr direkt meine Frustration gelöst. Vielen Dank. – beroe

Verwandte Themen