从apply / map循环中提取重复索引

时间:2018-06-26 14:27:48

标签: r functional-programming purrr

我正在尝试尽可能地将for循环替换为apply / map函数

但是,在需要使用循环索引作为位置的时候,我陷入了困境。使用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函数重写以上内容?

2 个答案:

答案 0 :(得分:1)

我们可以对此向量化

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

答案 1 :(得分:1)

您可以使用:

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