从应用/映射循环中提取重复索引
Extracting repetition index from apply / map loop
我正在尝试尽可能用应用/映射函数替换我的 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))
如何使用 map
或 apply
函数重写上面的内容?
我们可以将其向量化
v1 <- c(2, 1, 3)
n <- length(v1)
(1/n) *sum((n - v1 + 1)/(seq_along(v1) * n))
#[1] 0.4259259
你可以使用这个:
x = c(2,1,3)
n = length(x)
(1/n) * sum(sapply(1:n, function(i) (n - x[i] + 1)/(i*n) ))
我正在尝试尽可能用应用/映射函数替换我的 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))
如何使用 map
或 apply
函数重写上面的内容?
我们可以将其向量化
v1 <- c(2, 1, 3)
n <- length(v1)
(1/n) *sum((n - v1 + 1)/(seq_along(v1) * n))
#[1] 0.4259259
你可以使用这个:
x = c(2,1,3)
n = length(x)
(1/n) * sum(sapply(1:n, function(i) (n - x[i] + 1)/(i*n) ))