Вычислить средневзвешенное арифметическое с циклом?

В R я могу использовать weighted.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

Что я делаю не так?


person Ignacio    schedule 24.07.2015    source источник


Ответы (2)


Вы просто забыли 1:length(wt)

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

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

sum(wt*x)
# [1] 3.453333

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

person josliber♦    schedule 24.07.2015