用循环计算加权算术平均值?

Ign*_*cio 1 loops for-loop r do-loops

在 RI 中可以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
Run Code Online (Sandbox Code Playgroud)

我可以“手工”计算这个: 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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

jos*_*ber 5

不需要循环:

sum(wt*x)
# [1] 3.453333
Run Code Online (Sandbox Code Playgroud)

在 R 中,使用矢量化函数sum而不是简单的算术运算循环,效率更高并且通常更少键入(在这种情况下为一行而不是 5 行)。