【问题标题】:R Studio 7 Day Moving Average without functions [closed]没有函数的 R Studio 7 天移动平均线 [关闭]
【发布时间】:2021-04-18 01:01:13
【问题描述】:

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

【问题讨论】:

  • 我不明白。 R 是一种函数式语言,实际上 R 中的所有内容都是函数。具体有哪些要求?不能使用mean()?甚至+ 在技术上也是 R 中的一个函数。这看起来很奇怪。这有什么原因吗?是某种家庭作业吗?
  • 是的,这是家庭作业。
  • 好吧,然后看看这篇关于发布家庭作业问题的帖子:meta.stackoverflow.com/questions/334822/…。试着问一个更具体的问题,而不是让别人为你做作业。
  • 可以问作业。一方面,即使我们愿意,也不可能阻止这一切。 Stack Overflow 的存在是为了帮助程序员学习并为简单和复杂的编程问题提供标准存储库,这包括帮助学生。
  • 是的,可以询问家庭作业问题,但您是否阅读了 MrFlick 分享的链接? meta.stackoverflow.com/questions/334822/…在请求我们帮助您之前,您需要先表现出您的努力。你需要在你的帖子中包含这些努力。目前,我们没有看到您的任何努力。

标签: r average


【解决方案1】:

正如@MrFlick 指出的那样,几乎不可能遵守 OP 的“不调用任何 R 函数”的要求。这毕竟是 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

【讨论】:

    【解决方案2】:

    使用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
    
    

    【讨论】:

      猜你喜欢
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      相关资源
      最近更新 更多