Извлечение индекса повторения из цикла apply / map - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь везде, где это возможно, заменить циклы for на функции apply / map

Однако я застрял, когда мне нужно использовать индекс цикла в качестве позиции. Это легко сделать с помощью for loop

Возьмите следующий код, я использую индекс 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))

как мне переписать вышесказанное с использованием функций map или apply?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете использовать это:

x = c(2,1,3)
n = length(x)
(1/n) * sum(sapply(1:n, function(i) (n - x[i] + 1)/(i*n)  ))
0 голосов
/ 26 июня 2018

Мы могли бы векторизовать это

v1 <- c(2, 1, 3)
n <- length(v1)
(1/n) *sum((n - v1 + 1)/(seq_along(v1) * n))
#[1] 0.4259259
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...