我正在尝试尽可能地将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))
如何使用map
或apply
函数重写以上内容?
答案 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) ))