2015-07-24 3 views
1

В R Я могу использовать weighted.mean для вычисления Weighted Arithmetic Mean. Например:Вычислить взвешенную арифметическую среднюю с петлей?

wt <- c(5, 5, 4, 1)/15 
x <- c(3.7,3.3,3.5,2.8) 
xm <- weighted.mean(x, wt) 
xm 
[1] 3.453333 

я могу вычислить это «вручную»: wt[1]*x[1]+wt[2]*x[2]+wt[3]*x[3]+wt[4]*x[4]

Я хотел бы написать цикл, чтобы сделать то же самое. Я написал этот код:

xm <-0 
for(j in length(wt)){ 
    xm <- xm + wt[j]*x[j] 
} 
xm 
[1] 0.1866667 

Что я делаю неправильно?

ответ

4

Вы просто забыли 1: длина (вес)

xm <-0 
for(j in 1:length(wt)){ 
xm <- xm + wt[j]*x[j] 
} 
xm 
[1] 3.453333 
4

Нет необходимости в цикле:

sum(wt*x) 
# [1] 3.453333 

В R является его более эффективным и, как правило, меньше печатать (одна строка вместо 5 в этом случае) для использования векторизованных функций, таких как sum, вместо циклирования с помощью простых арифметических операций.

Смежные вопросы