Użyj outer zamiast expand.grid

Szukam jak największej prędkości i pozostania w bazie, aby robić coexpand.grid robi. używałemouter do podobnych celów w przeszłości, aby utworzyć wektor; coś takiego:

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

Benchmarking mi to pokazałouter&nbsp;może być znacznie szybszy niżexpand.grid&nbsp;ale tym razem chcę stworzyć dwie kolumnyexpand.grid&nbsp;(wszystkie możliwe kombinacje dla 2 wektorów), ale moje metody zouter&nbsp;nie testuj tak szybko z zewnętrznym tym razem.

Mam nadzieję, że wezmę 2 wektory i stworzę każdą możliwą kombinację jako dwie kolumny tak szybko, jak to możliwe (myślęouter&nbsp;może być trasą, ale jestem otwarty na każdą metodę bazową.

Tutaj jestexpand.grid&nbsp;metoda iouter&nbsp;metoda.

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)

Pokazują mikrobenografyouter&nbsp;jest wolniejszy:

#     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

Myślę, że mójouter&nbsp;użycie jest powolne, ponieważ nie wiem, jak używaćouter&nbsp;aby bezpośrednio utworzyć wektor długości 2, który mogędo.call('rbind'&nbsp;razem. Muszę zwolnićpaste&nbsp;i powolny podział. Jak mogę to zrobićouter&nbsp;(lub inne metody wbase) w sposób szybszy niżexpand grid?

EDYTUJ: Dodawanie wyników mikroznaków.

**

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

**