Use outer em vez de expand.grid

Eu estou procurando o máximo de velocidade possível e ficar na base para fazer o queexpand.grid faz. Eu tenho usadoouter para propósitos similares no passado para criar um vetor; algo assim:

v <- outer(letters, LETTERS, paste0)
unlist(v[lower.tri(v)])

O benchmarking me mostrou queouter&nbsp;pode ser drasticamente mais rápido do queexpand.grid&nbsp;mas desta vez eu quero criar duas colunas comoexpand.grid&nbsp;(todos os combos possíveis para 2 vetores), mas meus métodos comouter&nbsp;não faça benchmark tão rápido com o exterior desta vez.

Eu estou esperando para pegar 2 vetores e criar todos os combos possíveis como duas colunas o mais rápido possível (eu achoouter&nbsp;pode ser a rota, mas estou aberta a qualquer método base.

Aqui está oexpand.grid&nbsp;método eouter&nbsp;método.

dat <- cbind(mtcars, mtcars, mtcars)

expand.grid(seq_len(nrow(dat)), seq_len(ncol(dat)))

FOO <- function(x, y) paste(x, y, sep=":")
x <- outer(seq_len(nrow(dat)), seq_len(ncol(dat)), FOO)
apply(do.call("rbind", strsplit(x, ":")), 2, as.integer)

O microbenchmarking mostraouter&nbsp;é mais lento:

#     expr      min        lq    median        uq      max
# EXPAND.G  812.743  838.6375  894.6245  927.7505 27029.54
#    OUTER 5107.871 5198.3835 5329.4860 5605.2215 27559.08

Eu acho que meuouter&nbsp;o uso é lento porque eu não sei como usarouter&nbsp;para criar diretamente um vetor de comprimento 2 que eu possodo.call('rbind'&nbsp;juntos. Eu tenho que diminuirpaste&nbsp;e lenta divisão. Como posso fazer isso comouter&nbsp;(ou outros métodos embase) de uma maneira mais rápida queexpand grid?

EDIT: Adicionando os resultados do microbenchmark.

**

Unit: microseconds
      expr     min       lq  median      uq       max
1   ERNEST  34.993  39.1920  52.255  57.854 29170.705
2     JOHN  13.997  16.3300  19.130  23.329   266.872
3 ORIGINAL 352.720 372.7815 392.377 418.738 36519.952
4    TOMMY  16.330  19.5960  23.795  27.061  6217.374
5  VINCENT 377.447 400.3090 418.505 451.864 43567.334

**