2014-11-21 30 views
15

的空載體我想要的POSIXct空載體,這樣我可以在裏面放了POSIXct如何使POSIXct

vec <- vector("POSIXct", 10) 
vec 
vec[1] <- "2014-10-27 18:11:36 PDT" 
vec 

這是行不通的。有任何想法嗎?

+5

我是初始化爲'NA','as.POSIXct(rep(NA,10))' – Gregor 2014-11-21 00:38:28

+0

@Gregor的粉絲 - 你想發佈一個答案嗎?關於結果的數學運算,我有一些有效的擔憂。 – 2015-10-07 20:02:22

回答

16

由於沒有POSIX mode,你不能初始化向量POSIXct單獨vector()(見?mode所有模式類型的列表)。

但是我們可以使用.POSIXct來創建一個字符向量。

(x <- .POSIXct(character(10))) ## the same as .POSIXct(vector("character", 10)) 
# [1] NA NA NA NA NA NA NA NA NA NA 
class(x) 
# [1] "POSIXct" "POSIXt" 

另外請注意,您還可以使用.POSIXct(integer(10))的起源日期時間的長度10載體。

+1

這是我從未嘗試過的東西。有趣! +1 – jazzurro 2014-11-21 00:55:36

+0

這很簡潔,但它依賴於'.POSIXct'中的解析。更簡單(可能更清晰)將是'.POSIXct(rep(NA,10))' – user295691 2015-10-07 19:33:55

+1

分析貫穿性?不知道這意味着什麼,'.POSIXct()'只是使用'structure()'。有很多方法。你也可以使用'.POSIXct(NA [1:10])' – 2015-10-07 19:35:46

0

當創建以下列方式一POSIXct矢量,底層類型變爲雙:

> times <- as.POSIXct(c("2015-09-18 09:01:05.984 CEST", "2015-09-18 10:01:10.984 CEST", "2015-09-18 10:21:20.584 CEST")) 
> typeof(times) 
[1] "double" 
> values <- c(5,6,7) 

結合上述矢量與字符初始化爲基礎類型的POSIXct空載體,在一個character-結果POSIXct載體:

> tm1 <- c(.POSIXct(character(0)), times) 
> typeof(tm1) 
[1] "character" 

...不能直接畫在:

> ggplot() + geom_line(aes(x=tm1, y=val), data=data.frame(tm1,val)) 
geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 

因此,我更喜歡初始化我的空POSIXct矢量與雙或整數作爲底層類型:

> tm2 <- c(.POSIXct(double(0)), times) 
> typeof(tm2) 
[1] "double" 
> ggplot() + geom_line(aes(x=tm2, y=val), data=data.frame(tm2,val)) 

Simple POSIXct plot

> tm3 <- c(.POSIXct(integer(0)), times) 
> typeof(tm3) 
[1] "double" 
> ggplot() + geom_line(aes(x=tm3, y=val), data=data.frame(tm3,val)) 
#Same thing... 

當使用雙,載體也被初始化與有效日期(這可能或可能不是最好):

> .POSIXct(character(10)) 
[1] NA NA NA NA NA NA NA NA NA NA 
> .POSIXct(double(10)) 
[1] "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" 
[7] "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" "1970-01-01 01:00:00 CET" 
2

我通常初始化的事情NA

as.POSIXct(rep(NA, 10)) 

在這種情況下效果很好。它明確地做了@ RichardScriven的答案中發生的一切 - 請參閱那裏的評論以進行更長時間的討論。