我有一个关于 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"
问题是我不想用任何日期初始化我的向量,即我希望它在开始时为空。
我尝试使用 list 然后“取消列出”它(因为我想将这些日期作为参数传递给 max() 之类的函数),但它也给了我数字:
a <- list()
a[[1]] <- now()
a[[2]] <- now()
class(unlist(a))
使用
array
也没有帮助我。因此我有点卡住了。我已阅读有关 r 中向量输出类型的文档,但找不到任何解决方案。如何创建一个空的日期 vecto,附加一些日期并最终获取日期?谢谢你。
最佳答案
请记住,当您使用 c()
时你没有初始化一个向量,而是创建了一个 NULL
值(value)。您需要使用 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")
关于r - R中向量的输出类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14583327/