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

时间:2016-01-11 16:58:24

标签: r xts quantmod strptime

我有一个xts列表对象,我试图将我的列表中的日期放在一个向量中,然后在后续处理中用作xts索引。虽然我的数据包含时间戳,但为了便于说明,我将从谷歌中提取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()从每周的第一行获取所有日期,将返回其所有11个元素$ sec,$ min ... days,一年中的一周。它没有按照我提供的格式给出日期。我想要实现的是从该特定格式的第一行返回日期。我不确定传递给vapply()

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

我还为POSIXct(1)和其他一些人试过FUN.VALUE,真的没有运气猜测。

1 个答案:

答案 0 :(得分:1)

这是因为strptime返回一个POSIXlt对象,这非常复杂。最好使用lapply选择索引,然后使用do.call将它们组合起来。您还可以通过这种方式设置最终对象的类,例如使用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"