【问题标题】:Loop over dates in R在R中循环日期
【发布时间】:2020-07-06 13:21:57
【问题描述】:

我想在 R 中循环一系列日期。下面是一些示例代码:

myDates <- seq.Date(as.Date("2020-01-01"), as.Date("2020-01-03"), by = "day")
myDates[1]
class(myDates[1])

这会创建一个日期向量,我通过打印并检查第一个元素的类来确认这一点。

但是,当我运行这个循环时:

for (myDate in myDates) print(myDate)

我得到这个输出:

[1] 18262
[1] 18263
[1] 18264

查看this 问题后,我有一些变通方法可以解决我当前的问题,但是谁能向我解释为什么会发生这种情况,以及是否有一种简单的方法可以直接遍历日期向量?

【问题讨论】:

  • 你能说出你的最终目标是什么吗?
  • 虽然我同意,但这令人费解(就像 R 中的某些东西 一样),您可以执行 for (myDate in as.list(myDates)) print(myDate),它可以按您预期的那样工作。 (在 R 中有几次向量是非类的,包括 ifelse 和类似的。这显然是其中一种情况。)

标签: r date for-loop


【解决方案1】:

@r2evans 在您帖子的 cmets 中已解释了原因。实际上,您有几种方法可以规避该问题,例如,

> d <- Map(print,myDates)
[1] "2020-01-01"
[1] "2020-01-02"
[1] "2020-01-03"

> for (myDate in as.character(myDates)) print(myDate)
[1] "2020-01-01"
[1] "2020-01-02"
[1] "2020-01-03"

【讨论】:

  • 感谢@ThomasIsCoding,我认为顶级方法类似于 r2evans 建议将其强制到列表中。第二个实际上不适合我的情况,因为我确实需要在循环中保留日期类型...
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2021-12-13
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多