【发布时间】:2013-01-09 18:09:44
【问题描述】:
这与Looping over a Date or POSIXct object results in a numeric iterator有关
> dates <- as.Date(c("2013-01-01", "2013-01-02"))
> class(dates)
[1] "Date"
> for(d in dates) print(class(d))
[1] "numeric"
[1] "numeric"
我有两个问题:
- 迭代 Date 对象列表的首选方法是什么?
- 我不明白 Joshua 的答案(从上面链接的问题中接受的答案),我会在这里引用它:“所以你的
Date向量被强制为numeric因为Date对象不是严格的向量”。那么如何确定Date应该被强制转换为numeric呢?
【问题讨论】:
-
我的评论的意思是:
is.vector(dates) # FALSE,所以日期不是“向量”。您的第二个问题应该是对我之前回答的评论。 -
很明显
dates不是向量,很明显它是Date。但是是什么让它表现得像一个向量。是什么让它可迭代? -
来自帮助页面
?vector。 “对于任何模式,如果 x 具有除名称之外的任何属性,它 [is.vector] 将返回 FALSE。”在 R-speak 中,“向量”并不意味着它可以通过位置访问,而是它没有属性。它特别声明因素不是向量,它可能还应该声明 Date 和 POSIXt 分类对象也不是。 -
回答问题 1。您可以将
dates保留为字符向量并在循环中强制或使用您链接的帖子中提到的seq_along()技术...(或答案之一下面) -
@JoshuaUlrich @DWin 我不认为这是向量的标准定义。日期是向量,但
is.vector函数令人困惑 - 它会告诉您是否有一个没有属性的原子向量。is.atomic(as.Date("2012-01-01"))为 TRUE,因此日期是原子向量。