2016-11-18 2 views
6

Предоставлено m, как мы можем сгенерировать m номера с одинаковым интервалом, которые суммируются с 1 такими, что A1 > A2 > ... > Am?Создайте m равноразмерных чисел, которые суммируются до 1 в R

Например, если m=4 то мы должны иметь:

a <- c(0.4, 0.3, 0.2, 0.1) 

abs(diff(a)) 
#[1] 0.1 0.1 0.1 

sum(a) 
#[1] 1 

Или для m=5:

b <- c(0.30, 0.25, 0.20, 0.15, 0.10) 

abs(diff(b)) 
#[1] 0.05 0.05 0.05 0.05 

sum(b) 
#[1] 

ответ

4

Если вы хотите, регулируемое пространство или запуск point, вы можете использовать формулу для вычисления пространства на основе starti нг точка или точка на основе площади:

Сценарий 1: Регулируемая точка:

m = 5; s = 0.9 

seq(from = s, by = -(m*s - 1) * 2/((m - 1) * m), length.out = m) 
#[1] 0.90 0.55 0.20 -0.15 -0.50 

sum(seq(from = s, by = -(m*s - 1) * 2/((m - 1) * m), length.out = m)) 
#[1] 1 

Сценарий 2: Регулируемая площадь:

m = 5; d = 0.2 

seq(from = 1/m + ((m - 1) * d/2), by = -d, length.out = m) 
# [1] 0.6 0.4 0.2 0.0 -0.2 

sum(seq(from = 1/m + ((m - 1) * d/2), by = -d, length.out = m)) 
# [1] 1 
9

Как насчет:

rev(seq_len(m)/sum(seq_len(m))) 

a <- rev(seq_len(4)/sum(seq_len(4))) 
##[1] 0.4 0.3 0.2 0.1 
abs(diff(a)) 
##[1] 0.1 0.1 0.1 
sum(a) 
##[1] 1 

b <- rev(seq_len(5)/sum(seq_len(5))) 
##[1] 0.33333333 0.26666667 0.20000000 0.13333333 0.06666667 
abs(diff(b)) 
##[1] 0.06666667 0.06666667 0.06666667 0.06666667 
sum(b) 
##[1] 1