用循环计算加权算术平均值?
Calculate Weighted Arithmetic Mean with a loop?
在 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
我可以计算这个"by hand":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
我做错了什么?
您刚刚忘记了 1:length(wt)
xm <-0
for(j in 1:length(wt)){
xm <- xm + wt[j]*x[j]
}
xm
[1] 3.453333
不需要循环:
sum(wt*x)
# [1] 3.453333
在 R 中,使用 sum
之类的向量化函数而不是使用简单的算术运算进行循环,是否更高效且通常输入更少(在本例中为一行而不是 5 行)。
在 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
我可以计算这个"by hand":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
我做错了什么?
您刚刚忘记了 1:length(wt)
xm <-0
for(j in 1:length(wt)){
xm <- xm + wt[j]*x[j]
}
xm
[1] 3.453333
不需要循环:
sum(wt*x)
# [1] 3.453333
在 R 中,使用 sum
之类的向量化函数而不是使用简单的算术运算进行循环,是否更高效且通常输入更少(在本例中为一行而不是 5 行)。