私は可能な限りスピードを求めており、基地にとどまって何をすべきかを考えてexpand.grid
います。outer
過去に同様の目的でベクトルを作成するために使用しました。このようなもの:
v <- outer(letters, LETTERS, paste0)
unlist(v[lower.tri(v)])
ベンチマークでは、これouter
よりも大幅に高速になる可能性があることが示されましたが、今回は 2 つの列(2 つのベクトルに対して可能なすべての組み合わせ)expand.grid
と同じように作成したいと考えていますが、私の方法では今回はアウターほど高速ではありません。expand.grid
outer
私は2つのベクトルを取り、可能な限りすべてのコンボを2つの列としてできるだけ早く作成したいと考えています(outer
ルートかもしれませんが、あらゆる基本メソッドに広く開かれています.
そのexpand.grid
方法とouter
方法をご紹介します。
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)
マイクロベンチマークouter
は遅いことを示しています:
# 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
一緒にできる長さ2のベクトルを直接作成するouter
方法がわからないため、使用が遅いと思います。私はゆっくりとゆっくりと分割する必要があります。よりも高速な方法で (または の他のメソッド) でこれを行うにはどうすればよいですか?outer
do.call('rbind'
paste
outer
base
expand grid
編集: マイクロベンチマークの結果を追加します。
**
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
**