-2

尝试编写一个函数(不使用 r 函数),该函数接受一个向量并返回一个与 7 天平均值相同长度的向量。理想情况下,如果输入 1:10,则输出将为 1.0,1.5,2.0,2.5,3.0,3.5,4.0,5.0,6.0,7.0。

4

2 回答 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 回答