尝试编写一个函数(不使用 r 函数),该函数接受一个向量并返回一个与 7 天平均值相同长度的向量。理想情况下,如果输入 1:10,则输出将为 1.0,1.5,2.0,2.5,3.0,3.5,4.0,5.0,6.0,7.0。
2 回答
1
正如@MrFlick 指出的那样,几乎不可能遵守“不调用任何 R 函数”的 OP 要求。毕竟这是R。
引用约翰·钱伯斯的话:
“要理解 R 中的计算,有两个口号很有帮助:
• 存在的一切都是对象。• 发生的一切都是函数调用。”
也就是说,我尝试了这个任务:
该moving_avg()函数有 2 个参数:一个数字向量x和移动平均线的“范围” range_moving_avg,并输出该向量的移动平均线:
moving_avg<-function(x, range_moving_avg){
if(!is.numeric(x)){
stop("x should be numeric")
}else{
output<-numeric(length(x))
for (i in seq_along(x)){
index<-(i+1-range_moving_avg):i
index<-index[index>=0]
output[i]<-mean(x[index])
}
}
output
}
moving_avg(1:10, 7)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 5.0 6.0 7.0
于 2021-04-18T02:32:40.147 回答
0
另一种使用 for 循环的方法
rol_mn <- function(x, n){
r <- numeric()
for(i in seq_along(x)){
r[i] <- mean(x[seq(i-n+1, i, 1)[seq(i-n+1, i, 1) > 0]])
}
return(r)
}
> rol_mn(1:10, 7)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 5.0 6.0 7.0
于 2021-04-18T05:40:01.770 回答