Элементы Date
, первый цикл правильный.
К сожалению, R не всегда имеет стиль второго цикла. Я считаю, что проблема заключается в том, что синтаксис for (i in x)
обходит методы Date
для методов доступа, таких как [
, что он может сделать, потому что классы S3 в R очень тонкие и не мешают вам не использовать их намеченные интерфейсы. Это может сбивать с толку, потому что что-то вроде for (i in 1:4) print(i)
работает напрямую, поскольку числовой тип является базовым вектором. Date
- это S3, поэтому он приводится к числовому. Чтобы увидеть числовые объекты, которые печатаются во втором цикле, вы можете запустить это:
x <- as.Date(c("2018-01-01", "2018-01-02", "2018-01-02", "2018-05-06"))
for (i in x) print(i)
#> [1] 17532
#> [1] 17533
#> [1] 17533
#> [1] 17657
, который дает вам то же самое, что и неклассифицированная версия вектора Date
. Эти числа являются днями с начала времени Unix, которые вы также можете увидеть ниже, если преобразовать их обратно в Date
с этим origin
.
unclass(x)
#> [1] 17532 17533 17533 17657
as.Date(unclass(x), "1970-01-01")
#> [1] "2018-01-01" "2018-01-02" "2018-01-02" "2018-05-06"
Так что я бы придерживался подходящих методов доступа для любых векторных типов S3, как вы делаете в первом цикле.