私は基本的に、Rでこの Ruby スクリプトのバリエーションを実行する方法を探しています。互いに距離が等しくない数値 (この場合は回帰プロットのモデレーターのステップ) の
任意のリストがあります。これらの数値の範囲内にある値を、リスト内の最も近い数値に丸めます。範囲は重複しません。
arbitrary.numbers <- c(4,10,15) / 10
numbers <- c(16:1 / 10, 0.39, 1.45)
range <- 0.1
期待される出力:
numbers
## 1.6 1.5 1.4 1.3 1.2 1.1 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.39 1.45
round_to_nearest_neighbour_in_range(numbers,arbitrary.numbers,range)
## 1.5 1.5 1.5 1.3 1.2 1.0 1.0 1.0 0.8 0.7 0.6 0.4 0.4 0.4 0.2 0.1 0.4 1.5
特定の問題に対応できる小さなヘルパー関数がありますが、柔軟性が低く、ループが含まれています。ここに投稿できますが、実際のソリューションはまったく異なるように見えると思います。
速度に合わせたさまざまな回答 (100 万の数字)
> numbers = rep(numbers,length.out = 1000000)
> system.time({ mvg.round(numbers,arbitrary.numbers,range) })[3]
elapsed
0.067
> system.time({ rinker.loop.round(numbers,arbitrary.numbers,range) })[3]
elapsed
0.289
> system.time({ rinker.round(numbers,arbitrary.numbers,range) })[3]
elapsed
1.403
> system.time({ nograpes.round(numbers,arbitrary.numbers,range) })[3]
elapsed
1.971
> system.time({ january.round(numbers,arbitrary.numbers,range) })[3]
elapsed
16.12
> system.time({ shariff.round(numbers,arbitrary.numbers,range) })[3]
elapsed
15.833
> system.time({ mplourde.round(numbers,arbitrary.numbers,range) })[3]
elapsed
9.613
> system.time({ kohske.round(numbers,arbitrary.numbers,range) })[3]
elapsed
26.274
MvG の関数は最も高速で、Tyler Rinker の 2 番目の関数よりも約 5 倍高速です。