R可选地使用timeDate包对假日矢量进行编码

时间:2019-01-07 22:16:28

标签: r date time-series forecasting arima

R中的timeDate包提供了我想在时间序列数据集中包含的假期列表。如果我调用timeDate::listHolidays("US"),我会得到一个美国假期名称的向量,该向量与timeDate包中的函数名称相对应。我想以编程方式遍历这些假期列表,并获取给定年份(或几年)的日期值。

类似

hdates <- list()
i <- 1
for (h in timeDate::listHolidays('US')) {
    hdates[[i]] <- h(2018)
    i <- i + 1
}

这当然不起作用,因为h是字符串/字符而不是函数。有什么方法可以通过编程方式从命名空间中获取命名函数?我也愿意采用其他方法提取多个假期的日期。

1 个答案:

答案 0 :(得分:1)

使用eval(parse(text=)) ...

library(timeDate)
hdates <- list()
i <- 1
for (h in listHolidays('US')) {
    hdates[[i]] <- eval(parse(text=paste0(h, "(2018)")))
    i <- i + 1
}

或更简洁的方法...

lapply(listHolidays('US'), function(x) eval(parse(text=paste0(x, "(2018)"))))

或者如果您想获取命名列表元素...

sapply(listHolidays('US'), function(x) eval(parse(text=paste0(x, "(2018)"))))