Skip to Content

Transform list with different sized vectors to flat vector

I'm struggling with analyzing values in a rather complex list with vectors.
It is a list with coefficients (=vector) of applying ARIMA testing to a number of time series.

These coefficient vectors may be empty (numeric(0)), or of different sizes. An example:

> test <- list(numeric(0),c(ma1=0.7712434), c(ar1=0.6438842, ar2=-0.3112884))
> test
[[1]]
numeric(0)
 
[[2]]
      ma1 
0.7712434 
 
[[3]]
       ar1        ar2 
 0.6438842 -0.3112884 

I want to be able to easy select all the 'ar' or 'ar1' terms for instance (selection based on the name). I'm struggling handling this complex list. So I think the easiest solution is to transform this list of vectors into a single vector (ignoring the empty numerics).

For the example above resulting in:

> c(ma1=0.7712434, ar1=0.6438842, ar2=-0.3112884)
       ma1        ar1        ar2 
 0.7712434  0.6438842 -0.3112884

Who's able to help me out??

Note:
I was able to calculate the number of, lets say, AR terms, based on their names, see below. But I'm not able to use this in extracting the actual values of those terms.

tempFunName <- function(vec, name) { substr(names(vec),1,2) == name } # info on coef types
termType <- "ar" # all names starting with "ar"
sum(sapply(lapply(test, tempFunName, name=termType), sum, simplify=TRUE)) # all names starting with "ar"