I’m looking for a better, neater, more R-like solution to this - please hit me up on twitter.

At the moment, I can’t even include a benchmark screenshot as I only have just the one idea on how to do this!

## Interleaving a vector with a matrix of the same width

I have a vector a row-vector and matrix of equal width

```
vec <- c(101, 102, 103)
mat <- matrix(c(1, 2, 3,
4, 5, 6,
7, 8, 9), nrow = 3, byrow = TRUE)
```

Expected output after interleaving by column

```
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 101 2 102 3 103
[2,] 4 101 5 102 6 103
[3,] 7 101 8 102 9 103
```

## My solution

```
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#' Interleave a matrix and a row-vector of the same width
#'
#' * Create an empty matrix of double the width
#' * Copy over the given matrix
#' * Copy over the vector (using a for loop. quelle horreur!)
#'
#' @param m NxM matrix
#' @param v vector of length M
#'
#' @return N x M*2 matrix
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
interleave <- function(m, v) {
res <- matrix(0, ncol = 2L * ncol(m), nrow = nrow(m))
res[,c(T, F)] <- m
for (i in seq_along(v)) {
res[,2L * i] <- v[i]
}
res
}
```

`interleave(mat, vec)`

```
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 101 2 102 3 103
[2,] 4 101 5 102 6 103
[3,] 7 101 8 102 9 103
```

# Summary

Anyone have any better ideas?

## Share this post

Twitter

Google+

Facebook

Reddit

LinkedIn

StumbleUpon

Pinterest

Email