'How to efficiently implement the selection of best break points in a range?

For any positive range (e.g., (1, 100)), and a set of numbers like this (they are of the form 1, 2, 5 * 10^n),

0.5  1.0  2.0  5.0 10.0 20.0 50.0

Multiples of each of this set of numbers in the range can be listed in a table like the following. ▸ means TAB.

The 1st column is the multiples. The 2nd column is those multiples converted to log scale then scaled rounded to between 0 and 9. The goal is, for rows with the same value in the 2nd column, find the one with the maximum multiple. For example, for 0, the row is that with 1st column 1.0; for 1, the row is that with 1st column 2.0.

I want to find a function that takes the range and returns those numbers.

For example, for input range c(1, 100), and n=10 (0, ..., 9 are ten numbers), the output of the function should be the following.

> f(c(1, 100), c(0.5, 1.0, 2.0, 5.0, 10.0, 20.0, 50.0), n=10)
[1] 1 2 5 8 10 ... 100

I could use data.frame and merge, etc., to implement this function. But I am not sure it is the most efficent way to implement. How to program this in R efficiently?

1.0▸    0▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
1.5▸    0▸  .5▸ ▸   ▸   ▸   ▸   ▸   
2.0▸    1▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
2.5▸    1▸  .5▸ ▸   ▸   ▸   ▸   ▸   
3.0▸    2▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
3.5▸    2▸  .5▸ ▸   ▸   ▸   ▸   ▸   
4.0▸    3▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
4.5▸    3▸  .5▸ ▸   ▸   ▸   ▸   ▸   
5.0▸    3▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
5.5▸    3▸  .5▸ ▸   ▸   ▸   ▸   ▸   
6.0▸    3▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
6.5▸    4▸  .5▸ ▸   ▸   ▸   ▸   ▸   
7.0▸    4▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
7.5▸    4▸  .5▸ ▸   ▸   ▸   ▸   ▸   
8.0▸    4▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
8.5▸    4▸  .5▸ ▸   ▸   ▸   ▸   ▸   
9.0▸    4▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
9.5▸    4▸  .5▸ ▸   ▸   ▸   ▸   ▸   
10.0▸   5▸  .5▸ 1▸  2▸  5▸  10▸ ▸   
10.5▸   5▸  .5▸ ▸   ▸   ▸   ▸   ▸   
11.0▸   5▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
11.5▸   5▸  .5▸ ▸   ▸   ▸   ▸   ▸   
12.0▸   5▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
12.5▸   5▸  .5▸ ▸   ▸   ▸   ▸   ▸   
13.0▸   5▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
13.5▸   5▸  .5▸ ▸   ▸   ▸   ▸   ▸   
14.0▸   5▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
14.5▸   5▸  .5▸ ▸   ▸   ▸   ▸   ▸   
15.0▸   5▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
15.5▸   5▸  .5▸ ▸   ▸   ▸   ▸   ▸   
16.0▸   6▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
16.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
17.0▸   6▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
17.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
18.0▸   6▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
18.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
19.0▸   6▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
19.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
20.0▸   6▸  .5▸ 1▸  2▸  5▸  10▸ 20▸ 
20.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
21.0▸   6▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
21.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
22.0▸   6▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
22.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
23.0▸   6▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
23.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
24.0▸   6▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
24.5▸   6▸  .5▸ ▸   ▸   ▸   ▸   ▸   
25.0▸   6▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
25.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
26.0▸   7▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
26.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
27.0▸   7▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
27.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
28.0▸   7▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
28.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
29.0▸   7▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
29.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
30.0▸   7▸  .5▸ 1▸  2▸  5▸  10▸ ▸   
30.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
31.0▸   7▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
31.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
32.0▸   7▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
32.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
33.0▸   7▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
33.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
34.0▸   7▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
34.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
35.0▸   7▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
35.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
36.0▸   7▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
36.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
37.0▸   7▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
37.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
38.0▸   7▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
38.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
39.0▸   7▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
39.5▸   7▸  .5▸ ▸   ▸   ▸   ▸   ▸   
40.0▸   8▸  .5▸ 1▸  2▸  5▸  10▸ 20▸ 
40.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
41.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
41.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
42.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
42.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
43.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
43.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
44.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
44.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
45.0▸   8▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
45.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
46.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
46.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
47.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
47.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
48.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
48.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
49.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
49.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
50.0▸   8▸  .5▸ 1▸  2▸  5▸  10▸ ▸   50
50.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
51.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
51.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
52.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
52.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
53.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
53.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
54.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
54.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
55.0▸   8▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
55.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
56.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
56.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
57.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
57.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
58.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
58.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
59.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
59.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
60.0▸   8▸  .5▸ 1▸  2▸  5▸  10▸ 20▸ 
60.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
61.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
61.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
62.0▸   8▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
62.5▸   8▸  .5▸ ▸   ▸   ▸   ▸   ▸   
63.0▸   8▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
63.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
64.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
64.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
65.0▸   9▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
65.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
66.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
66.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
67.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
67.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
68.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
68.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
69.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
69.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
70.0▸   9▸  .5▸ 1▸  2▸  5▸  10▸ ▸   
70.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
71.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
71.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
72.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
72.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
73.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
73.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
74.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
74.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
75.0▸   9▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
75.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
76.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
76.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
77.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
77.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
78.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
78.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
79.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
79.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
80.0▸   9▸  .5▸ 1▸  2▸  5▸  10▸ 20▸ 
80.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
81.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
81.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
82.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
82.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
83.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
83.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
84.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
84.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
85.0▸   9▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
85.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
86.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
86.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
87.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
87.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
88.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
88.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
89.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
89.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
90.0▸   9▸  .5▸ 1▸  2▸  5▸  10▸ ▸   
90.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
91.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
91.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
92.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
92.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
93.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
93.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
94.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
94.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
95.0▸   9▸  .5▸ 1▸  ▸   5▸  ▸   ▸   
95.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
96.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
96.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
97.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
97.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
98.0▸   9▸  .5▸ 1▸  2▸  ▸   ▸   ▸   
98.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
99.0▸   9▸  .5▸ 1▸  ▸   ▸   ▸   ▸   
99.5▸   9▸  .5▸ ▸   ▸   ▸   ▸   ▸   
100.0▸  10▸ .5▸ 1▸  2▸  5▸  10▸ 20▸ 50
r


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source