在 R 中循环遍历日期会丢失格式

Looping through date in R loses format

这让我很沮丧。即使使用 lubridate,当我遍历它们时,我也无法获取日期来维护它们的类型。例如:

require(lubridate)
yearrange = ymd(20110101) + years(seq(4))
yearrange
#[1] "2012-01-01 UTC" "2013-01-01 UTC" "2014-01-01 UTC" "2015-01-01 UTC"
class(yearrange)
#[1] "POSIXct" "POSIXt" 

但是,如果我尝试遍历年份(为我的数据集中的每一年创建一个单独的图):我丢失了年份的格式,并且必须重新转换数据

for (yr in yearrange) { show(yr) }
#[1] 1325376000
#[1] 1356998400
#[1] 1388534400
#[1] 1420070400

如果我循环指定索引,我会返回日期对象:

for (i in seq(length(yearrange))) { show(yearrange[i]) }
#[1] "2012-01-01 UTC"
#[1] "2013-01-01 UTC"
#[1] "2014-01-01 UTC"
#[1] "2015-01-01 UTC"

有没有不使用 foreach 的简单方法来避免索引选项,或者这是唯一的方法?

试试这个

for (yr in as.list(yearrange))  { show(yr) }

我认为 for (yr in yearrange)yearrange 强制转换为矢量,而 POSIXct 不是矢量强制转换的受支持类型之一。

lapply好像没有同样的问题,例如:

for (x in yearrange) plot(1, main=x)
#Main title = 1420070400
lapply( yearrange, function(x) plot(1, main=x) )
#Main title = 2015-01-01