简体   繁体   中英

How to split a list of vectors to sub-lists by increasing order.

I have a list of n vectors. I would like to split it to sub-list where the number of the vectors at each list is different. The number of the vectors is increased sequentially from one list to another. For example, if I have a list with 6 vectors. Then, I would like to split it to several list as follows:

The first list contains one vector. Then, the second list contains 2 vectors and so on. For example,

Suppose I have the list x as follows:

x <- list(x1=c(1,2,3), x2=c(1,4,3), x3=c(3,4,6), x4=c(4,8,4), x5=c(4,33,4), x6=c(9,6,7))

Then, I would like to split it into 3 lists,

list1 = x1
list2 = list(x2, x3)
list3 = list(x4,x5, x6)

I have similar question ( How to splitting a list of vectors to small lists in decreasing order in r ) but in a decreasing order.

How I can generate it to arbitrary number of vectors. For example, how if I have 10 or 20 vectors?

Any idea, please?

I'd stick them all in a list of lists

MyLists <- list()
i <- 1
for (inc in 1:3){
  MyLists[[inc]] <- x[i:(i+inc-1)]
  i <- i+inc
}

Now MyLists[[1]] is list1 , etc.

Building off farnsy's answer, If you need each list in a separate indexed list in the global environment you could do something like this.

#your Stater list
x <- list(x1=c(1,2,3), x2=c(1,4,3), x3=c(3,4,6), 
          x4=c(4,8,4), x5=c(4,33,4), x6=c(9,6,7))


#using a paste parse eval approach to evaluate a string
i<-1
for(inc in 1:3){
  eval(parse(text =
      paste0("list", inc, "<-list(",
         paste0("x$",names(x)[i:(i+inc-1)],collapse = ","),
         ")")
  ))

  i <- i+inc
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM