2015-04-29 32 views
6

Bu beni sinir ediyor. lubridate ile bile onların üzerine geldiğimde türlerini korumak için tarihleri ​​alamıyorum. Ben (benim veri kümesindeki her yıl için ayrı olaylar dizisini) yıl boyunca döngü denersenizR kaybetme tarihi boyunca döngü,

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" 

Ancak: Örneğin: Yılın biçimi bozulur ve yeniden döküm olurdu Ben döngü indeksleri belirterek olsa da, alırsanız veri

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

tarih geri nesneleri: endeksli Opti önlemek için kolay bir yol

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" 

var mı on, foreach kullanmadan, ya da tek yolu bu mu?

cevap

7

bu

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

Ben for (yr in yearrange) bir vektör haline yearrange coerces POSIXct vektör içine coerces desteklenen türlerinden biri olmadığını düşünüyorum deneyin.

+0

sayesinde sahip görünmemektedir. Bu benim problemimi çözüyor. Ben de bir 'for' döngüsü yerine bir işlev olarak uygulayacağım, bu yüzden muhtemelen @ thelatemail çözümünü de kullanacağız. – beroe

2

lapply aynı sorun, ör .:

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

Evet, çünkü 'as.list (X)',' X = yearrange' kullanılır. "Lapply" nin kaynak kodunu incelediğinizde görebilirsiniz. – cryo111

+0

Döngülerimi döngü yerine üretmek için bir işlev yapacağım, bu yüzden cevabınızı da kullanacağım, diğeri ise hayal kırıklığımı doğrudan çözdü. Teşekkürler. – beroe