4

我有一个关于 R 中向量的非常基本的问题。我想创建一个空向量并将日期附加到它。但是,R 将日期转换为“数字”,即

library(lubridate)
a <- c()
a <- c(a,now())
class(a)

结果是

[1] "numeric"

同时,这段代码正是我想要的:

  a <- c(now())
  a <- c(a,now())
  class(a)

即班级现在是正确的:

[1] "POSIXct" "POSIXt"

问题是我不想用任何日期初始化我的向量,即我希望它在开始时为空。

我尝试使用列表,然后将其“取消列出”(因为我想将这些日期作为参数传递给 max() 之后的函数),但它也给了我数字:

a  <- list()
a[[1]] <- now()
a[[2]] <- now()
class(unlist(a))

使用array对我也没有帮助。

因此我有点卡住了。我已阅读有关 r 中向量输出类型的文档,但找不到任何解决方案。如何创建一个空的日期向量,附加几个日期并最终获取日期?谢谢你。

4

3 回答 3

6

请记住,当您使用时,c()您不会初始化向量,而是创建一个NULL值。您需要使用vector()来启动一个向量,您可以在其中操作类:

> identical(c(),NULL)
[1] TRUE
> identical(c(),vector())
[1] FALSE

除此之外,只要不涉及时区,@juba 的解决方案就可以了。如果有,您将获得以下信息:

> a <- vector()
> class(a) <- 'POSIXct'
> b <- as.POSIXct(as.character(Sys.time()),tz="GMT")
> b
[1] "2013-01-29 14:10:32 GMT"
> c(a,b)
[1] "2013-01-29 15:10:32 CET"

为了避免这种情况,您最好复制属性,如下所示:

> attributes(X) <- attributes(b)
> a <- vector()
> b <- as.POSIXct(as.character(Sys.time()),tz="GMT")
> X <- c(a,b)
> attributes(X) <- attributes(b)
> X
[1] "2013-01-29 14:10:32 GMT"

但无论如何,您根本不应该考虑这一点,原因很简单,附加向量是一个非常缓慢的过程,可能会给您带来麻烦。如果您必须在向量中保存 100 个日期,您最好使用 Paul Hiemstra 建议的 lapply/sapply 解决方案,或者您启动您的向量,例如:

> a <- vector("numeric",100)
> class(a) <- c('POSIXct','POSIXt')

或者

> a <- vector("numeric",100)
> attributes(a) <- list(class=c("POSIXct","POSIXt"),tzone="CET")
于 2013-01-29T13:11:43.660 回答
2

你可以试试这个:

library(lubridate)
a <- vector()
class(a) <- "POSIXct"
a <- c(a, now())
class(a)
[1] "POSIXct" "POSIXt" 
于 2013-01-29T12:53:21.380 回答
1

一般来说,没有必要从一个空向量开始。您可以创建一个带有日期的向量,如下所示:

date_vec = lapply(1:10, function(x) return(Sys.time()))
> date_vec                                                                  
[[1]]                                                                       
[1] "2013-01-29 13:53:29 CET"                                               

[[2]]                                                                       
[1] "2013-01-29 13:53:29 CET"                                               

[[3]]                                                                       
[1] "2013-01-29 13:53:29 CET"                                               

[[4]]                                                                       
[1] "2013-01-29 13:53:29 CET"                                               

[[5]]
[1] "2013-01-29 13:53:29 CET"

[[6]]
[1] "2013-01-29 13:53:29 CET"

[[7]]
[1] "2013-01-29 13:53:29 CET"

[[8]]
[1] "2013-01-29 13:53:29 CET"

[[9]]
[1] "2013-01-29 13:53:29 CET"

[[10]]
[1] "2013-01-29 13:53:29 CET"

或者,我经常使用表示日期的字符串创建日期向量strptime

于 2013-01-29T12:53:46.590 回答