strptime() 在匿名函数中的行为与我预期的不同

strptime() behaving differently in an anonymous function than I expected

我有一个 xts 列表对象,我正在尝试获取列表中的日期,然后将其放入一个向量中,后者用作进一步处理中的 xts 索引。虽然我的数据包含时间戳,但出于此说明的目的,我从 google 中提取 YHOO 数据。此数据没有仅时间戳日期的时间元素,但已经足够了。你需要quantmod。我提取数据,然后创建一个列表,使用以下代码将 YHOO 分成每周的子组件:

library(quantmod)
library(xts)

getSymbols("YHOO",src="google")
yhooL <- split.xts(YHOO,"weeks")

为了从第一个 yhooL 中获取日期,我传递了这段代码:

strptime(index(yhooL[[1]][1]),format="%Y-%m-%d")

它按预期工作,我得到了我的约会对象。但是要使用 vapply strptime() return 的所有十一个元素 $sec, $min...days, week of year 来获取每周第一行的所有日期。它没有按照我提供的格式给我日期。我想要实现的是 return 从该特定格式的第一行开始的日期。我不确定要传递给 vapply()

的参数 FUN.VALUE 什么值
vapply(yhooL, function(i) {strptime(index(i[1,]), format ="%Y-%m-%d")},double(1))

我也试过 POSIXct(1) FUN.VALUE 和其他一些,真的是在猜测,但运气不佳。

这是因为 strptime returns 一个 POSIXlt 对象,这很复杂。您最好使用 lapply 来挑选索引,然后使用 do.call 将它们组合起来。您也可以通过这种方式设置最终对象的 class,例如使用 as.Date.

x <- do.call(c,lapply(yhooL, function(i) as.Date(index(i)[1])))
summary(x)
        Min.      1st Qu.       Median         Mean      3rd Qu.         Max. 
"2007-01-03" "2009-04-02" "2011-07-05" "2011-07-04" "2013-10-03" "2016-01-04" 
class(x)
[1] "Date"