2011-07-21 29 views
12

例如,我嘗試下面的創建日期的向量,長度5.無工作:R - 如何聲明Date的向量?

date(5) 
Date(5) 
vector(5, mode = "Date") 

這工作,但不知道是否有捷徑?

as.Date(numeric(5)) 

另外,我發現模式(as.Date(「2011-01-01」))是數字和我明白的日期的基礎數據結構是數字,但考慮到載體()只具有一個模式和長度的論點,在我看來,它是不可能創建一個沒有強制的日期向量?

編輯
這也是一個解決方案,除了長度= 0?

Date = function(length = 0) 
{ 
    newDate = numeric(length) 
    class(newDate) = "Date" 
    return(newDate) 
} 
+0

你要什麼的順序包含哪些內容? – hadley

+5

@hadley - 日期=) – SFun28

回答

16

您可以使用序列,或者只是只需添加:

R> seq(as.Date("2011-07-01"), by=1, len=3) 
[1] "2011-07-01" "2011-07-02" "2011-07-03" 
R> as.Date("2011-07-01") + 0:2 
[1] "2011-07-01" "2011-07-02" "2011-07-03" 
R> 

和工作都以同樣的方式就是爲什麼面向對象是與數據編程漂亮的一個很好的例子。正如你所看到的那樣,日期有一個基礎的數字表示形式(整數代表Unix時間開始後的天數,即1970年1月1日),但它也有一個類屬性,它使格式化,算術, ......表現它利用調度機制R.方式

編輯:同樣的道理,你也可以啓動一個標準載體,把它變成一個Date對象:

R> x <- 1:3 
R> class(x) <- "Date" 
R> x 
[1] "1970-01-02" "1970-01-03" "1970-01-04" 
R> 
+3

'structure'提供了另一種:'結構(數字(5)中,class = 「日期」)'或'結構(1:3中,class = 「日期」)'。 –

+0

@Dirk,約書亞 - 謝謝!你可以看看我的帖子的編輯。除了隱藏build-in date()函數外,這個解決方案是否也可以工作?這個功能似乎更加符合數字(),等,以此來申報日期 – SFun28

+0

@ SFun28的載體:我會用'日期()',而不是'日期()''因爲基地::日期( )'存在,並且類是「日期」而不是「日期」。 –

5

用缺失的日期代替一堆1970-01-01s進行初始化:

(x = structure(rep(NA_real_, 10), class="Date")) 
# [1] NA NA NA NA NA NA NA NA NA NA 
class(x) 
# [1] "Date" 
+0

酷!你甚至可以像'structure(rep(NA_real_,1),class = c(「POSIXct」,「POSIXt」)那樣使用' – Christoph