r - R中向量的输出类型

标签 r list date vector

我有一个关于 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/

相关文章:

python - 检查二维列表中的每个元素

java - 我有一个成对的列表,如何检查列表是否包含特定元素。list.contains 函数总是给出 false

r - 计数大于特定值的观察值

R:如何使用字符串调用函数并将参数粘贴到该函数中?

python - Python 中的元组减法语句

mysql - 日期之间的日期,忽略年份

Excel : Select max and min Datetime in a row

php - 将日期导入 MySQL

r - 将NA值为空白的数据帧写入csv文件

r - 使用 R 选择列中组内的前 N ​​个值