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

时间:2015-07-24 19:26:40

标签: r loops for-loop do-loops

在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

我可以手动计算这个&#34;: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

我做错了什么?

2 个答案:

答案 0 :(得分:4)

你刚忘了1:长度(wt)

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

答案 1 :(得分:4)

不需要循环:

sum(wt*x)
# [1] 3.453333

在R中,它更有效,并且通常更少的输入(在这种情况下是一行而不是5行),您可以使用像sum这样的矢量化函数,而不是使用简单的算术运算进行循环。