expand.grid
はできるだけ速く探しています。私はベクトルを作成するために過去に同様の目的のためにouter
を使用しました。このような何か:expand.gridの代わりにouterを使用
v <- outer(letters, LETTERS, paste0)
unlist(v[lower.tri(v)])
ベンチマークはouter
がexpand.grid
より大幅に高速になりますことを私に示しているが、私はちょうどexpand.grid
のように2つの列を作成したい、この時間(2つのベクトルのすべての可能なコンボ)が、outer
と私の方法はありません今回はアウターとのベンチマークが速かった。
私は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)
microbenchmarkingが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
outer
私はouter
を使って、長さ2のベクトルを直接作成する方法がわからないので、私は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
**
タイラー、私の方法をベンチマークリストに追加してもよろしいですか?あなたがここで持っている中で最も速いスピードのスピードの半分になるはずです。 – John
はい。それは確かに最も速いです。 –