J.Z.
J.Z.

Reputation: 435

How to create a list with variable number of lists in R

I am trying to create a list "pool" like this:

> n=10
> pool=list(0:n,0:n,0:n)
> pool
[[1]]
 [1]  0  1  2  3  4  5  6  7  8  9 10

[[2]]
 [1]  0  1  2  3  4  5  6  7  8  9 10

[[3]]
 [1]  0  1  2  3  4  5  6  7  8  9 10

Instead of typing the 0:n three times, I need to use a line of code to represent it because the number of repeats changes over time. I tried:

> K=3
> pool=NULL
> for (i in 1:K){
+   pool=list(pool,0:n)
+ }
> pool
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
NULL

[[1]][[1]][[2]]
 [1]  0  1  2  3  4  5  6  7  8  9 10


[[1]][[2]]
 [1]  0  1  2  3  4  5  6  7  8  9 10


[[2]]
 [1]  0  1  2  3  4  5  6  7  8  9 10

but they are different. How can I make it? Thanks!

Upvotes: 0

Views: 137

Answers (2)

Ronak Shah
Ronak Shah

Reputation: 388817

You can use replicate :

n = 10
K = 3

pool <- replicate(K, 0:n, simplify = FALSE)
pool

#[[1]]
# [1]  0  1  2  3  4  5  6  7  8  9 10

#[[2]]
# [1]  0  1  2  3  4  5  6  7  8  9 10

#[[3]]
# [1]  0  1  2  3  4  5  6  7  8  9 10

replicate is similar to purrr::rerun

pool <- purrr::rerun(K, 0:n)

Upvotes: 1

andrew_reece
andrew_reece

Reputation: 21264

Use rep:

k <- 3

rep(list(0:n), k)

Or you can use purrr::map:

purrr::map(1:k, ~0:n)

Output

[[1]]
 [1]  0  1  2  3  4  5  6  7  8  9 10

[[2]]
 [1]  0  1  2  3  4  5  6  7  8  9 10

[[3]]
 [1]  0  1  2  3  4  5  6  7  8  9 10

Upvotes: 1

Related Questions