Hi Rolf,

this topic is probably already saturated, but here is a tidyverse solution:

```

library(purrr)

x <- list(
  `1` = c(7, 13, 1, 4, 10),
  `2` = c(2, 5,  14, 8, 11),
  `3` = c(6, 9, 15, 12, 3)
)

x |>
  pmap(~ c(..1, ..2, ..3)) |>
  reduce(c)

#> [1]  7  2  6 13  5  9  1 14 15  4  8 12 10 11  3

```

Here, we map over the elements of the list in parallel (hence pmap), always combining the elements at the current position into a vector, which will result in a list like this:

```

[[1]]
[1] 7 2 6

[[2]]
[1] 13  5  9

...

```

And then we reduce this resulting list into a vector by successively combining its elements with `c()`. I think the formula syntax is a bit idiosyncratic, you could also do this with an anonymous function like pmap(\(`1`, `2`, `3`) c(`1`, `2`, `3`)), or if the list was unnamed as pmap(\(x, y, z) c(x, y, z)).

I personally find the tidyverse-esque code to be very explicit & readable, but given base R can do this very concisely one might argue that it is superfluous to bring in an extra library for this. I think Bert's solution ( `c(do.call(rbind, x))`) is great if `f` has no substantive meaning, and Deepayan's solution (`unsplit(x, f)`) is perfect in case it does - does not get much sexier than that, I am afraid.

Best,

Lennart


Am 27.09.24 um 05:55 schrieb Rolf Turner:
I have (toy example):

x <- list(`1` = c(7, 13, 1, 4, 10),
           `2` = c(2, 5,  14, 8, 11),
           `3` = c(6, 9, 15, 12, 3))
and

f <- factor(rep(1:3,5))

I want to create a vector v of length 15 such that the entries of v,
corresponding to level l of f are the entries of x[[l]].  I.e. I want
v to equal

     c(7, 2, 6, 13, 5, 9, 1, 14, 15, 4, 8, 12, 10, 11, 3)

I can create v "easily enough", using say, a for-loop.  It seems to me,
though, that there should be sexier (single command) way of achieving
the desired result.  However I cannot devise one.

Can anyone point me in the right direction?  Thanks.

cheers,

Rolf Turner


______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to