2015-04-29 35 views
6

To mnie frustruje. Nawet z lubridate nie mogę uzyskać dat, aby zachować ich typ, gdy przechodzę nad nimi. Na przykład:Zapętlenie daty w formacie R traci

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" 

Jednak gdy próbuję pętli lat (tworząc osobny wykres dla każdego roku w moim zbiorze danych): tracę formatowanie roku i będzie musiał ponownie rzucać dane

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

Gdybym pętla chociaż określenie wskaźników, otrzymuję data obiektów powrotem:

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" 

Czy istnieje prosty sposób na uniknięcie indeksowany Opti na, bez korzystania z foreach, czy jest to jedyny sposób?

Odpowiedz

7

Spróbuj

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

myślę for (yr in yearrange) wymusza yearrange do wektora i POSIXct nie jest jednym z obsługiwanych typów, które wymusza na wektor.

+0

dzięki. To rozwiązuje mój problem. Zamierzam również zaimplementować go jako funkcję zamiast pętli 'for', więc prawdopodobnie skorzystam również z rozwiązania @ mailmail – beroe

2

lapply nie wydaje się mieć ten sam problem, np .:

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

Tak, ponieważ używa' as.list (X) ', gdzie' X = yearrange'. Możesz go zobaczyć, kiedy sprawdzasz kod źródłowy "lapply". – cryo111

+0

Zamierzam zrobić funkcję generowania moich działek zamiast pętli, więc użyjesz również odpowiedzi, chociaż druga bardziej bezpośrednio rozwiązała moją frustrację. Dzięki. – beroe