【问题标题】:Extracting repetition index from apply / map loop从应用/映射循环中提取重复索引
【发布时间】:2018-06-26 14:27:48
【问题描述】:

我正在尽可能用应用/映射函数替换我的 for 循环

但是,当我需要使用循环索引作为位置时,我被卡住了。这很容易通过for 循环实现

拿下面的代码,我在赋值的左边和右边都使用了索引i

score <- function(x) {

  n <- length(x)
  right <- x

  for(i in 1:n) {
    right[i] <- (n - x[i] + 1) / (i * n)
  }

  (1 / n) * sum(right)
}

score(c(2,1,3))

如何使用mapapply 函数重写以上内容?

【问题讨论】:

    标签: r functional-programming purrr


    【解决方案1】:

    你可以用这个:

    x = c(2,1,3)
    n = length(x)
    (1/n) * sum(sapply(1:n, function(i) (n - x[i] + 1)/(i*n)  ))
    

    【讨论】:

      【解决方案2】:

      我们可以向量化这个

      v1 <- c(2, 1, 3)
      n <- length(v1)
      (1/n) *sum((n - v1 + 1)/(seq_along(v1) * n))
      #[1] 0.4259259
      

      【讨论】:

        猜你喜欢
        • 2018-03-03
        • 2021-03-30
        • 2016-08-21
        • 2015-07-22
        • 2019-12-02
        • 2013-01-15
        • 2023-02-17
        • 2013-03-19
        • 2021-11-02
        相关资源
        最近更新 更多