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

R Encoding Holiday Vectors optionally using timeDate package

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

类似于

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

这当然行不通,因为 h 是一个 string/character 而不是函数。有没有办法以编程方式从命名空间中获取命名函数?我也愿意使用其他方法来提取多个假期的日期。

使用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)"))))