Search code examples
rfinance

How to combine a list of timeDate into a single timeDate?


I can generate a list of timeDate objects for New York Exchange. However, most of the analytical functions expect a single timeDate object. The underlying data representation is POSIXct, so I can't just append them like a vector or a list.

How to do it?

library(timeDate)
x <- lapply(c(1885: 1886), holidayNYSE)
x

[[1]]
NewYork
[1] [1885-01-01] [1885-02-23] [1885-04-03] [1885-11-03] [1885-11-26] [1885-12-25]

[[2]]
NewYork
[1] [1886-01-01] [1886-02-22] [1886-04-23] [1886-05-31] [1886-07-05] [1886-11-02] [1886-11-25]

class(x[[1]])
[1] "timeDate"
attr(,"package")
[1] "timeDate"

class(x[[1]]@Data)
[1] "POSIXct" "POSIXt"

# ??? How to my two datetime objects ???

Solution

  • We can use do.call with c

    x1 <- do.call(c, x)
    x1
    #NewYork
    #[1] [1885-01-01] [1885-02-23] [1885-04-03] [1885-11-03] [1885-11-26] [1885-12-25] [1886-01-01] [1886-02-22] [1886-04-23] [1886-05-31] [1886-07-05] [1886-11-02]
    #[13] [1886-11-25]
    
    str(x1)
    #Formal class 'timeDate' [package "timeDate"] with 3 slots
    #  ..@ Data     : POSIXct[1:13], format: "1885-01-01 05:00:00" "1885-02-23 05:00:00" "1885-04-03 05:00:00" "1885-11-03 05:00:00" ...
    #  ..@ format   : chr "%Y-%m-%d"
    #  ..@ FinCenter: chr "NewYork"
    

    and the structure of OP's list is

    str(x)
    #List of 2
    #$ :Formal class 'timeDate' [package "timeDate"] with 3 slots
    #  .. ..@ Data     : POSIXct[1:6], format: "1885-01-01 05:00:00" "1885-02-23 05:00:00" "1885-04-03 05:00:00" "1885-11-03 05:00:00" ...
    #  .. ..@ format   : chr "%Y-%m-%d"
    #  .. ..@ FinCenter: chr "NewYork"
    # $ :Formal class 'timeDate' [package "timeDate"] with 3 slots
    #   .. ..@ Data     : POSIXct[1:7], format: "1886-01-01 05:00:00" "1886-02-22 05:00:00" "1886-04-23 05:00:00" "1886-05-31 05:00:00" ...
    #  .. ..@ format   : chr "%Y-%m-%d"
    #  .. ..@ FinCenter: chr "NewYork"