2014-11-21 41 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的答案中发生的一切 - 请参阅那里的评论以进行更长时间的讨论。