2015-04-29 44 views
6

這一直令我感到沮喪。即使有lubridate我無法獲取日期來保持它們的類型,當我循環它們時。例如:在R中通過日期循環丟失格式

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" 

但是,如果我嘗試遍歷年(在我的數據集建立每年爲一個單獨的情節):我失去了一年的格式,並且將不得不重新投放數據

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

如果我雖然指定指數環,我得到Date對象回來:

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" 

有一種簡單的方法,以避免在索引OPTI沒有使用foreach,或者是唯一的方法嗎?

回答

7

試試這個

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

我覺得for (yr in yearrange)要挾yearrange爲載體,POSIXct不是矢量強制轉換爲支持的類型之一。

+0

謝謝。這解決了我的問題。我也將把它作爲函數而不是'for'循環來實現,所以也可能會利用@thelatemail解決方案 – beroe

2

lapply似乎並不有同樣的問題,例如:

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

是的,因爲它使用'as.list(X)',其中'X = yearrange'。當你檢查'lapply'的源代碼時你可以看到它。 – cryo111

+0

我要做一個函數來生成我的情節,而不是循環,所以也會使用你的答案,儘管另一個更直接地解決了我的沮喪。謝謝。 – beroe