使用 purrr 应用累积函数
Using purrr to apply cumulative function
对于 x 的每个位置,我想计算有多少数字 > 5。
这是我的代码,使用 for 循环:
x<-c(2,8,4,9,10,6,7,3,1,5)
y <- vector()
for (i in seq_along(x)) {
x1 <- x[1:i]
y <- c(y, length(x1[x1>5]))
}
> y
[1] 0 1 1 2 3 4 5 5 5 5
你能帮我用 purrr 来做吗?这里可以用purrr::reduce吗?
cumsum
函数可以做到这一点
cumsum(x>5)
#[1] 0 1 1 2 3 4 5 5 5 5
您可以使用 purrr
中的 accumulate()
:
accumulate(x > 5, `+`)
#[1] 0 1 1 2 3 4 5 5 5 5
它基本上是 Reduce()
和 accumulate = TRUE
的包装
accumulate <- function(.x, .f, ..., .init) {
.f <- as_function(.f, ...)
f <- function(x, y) {
.f(x, y, ...)
}
Reduce(f, .x, init = .init, accumulate = TRUE)
}
对于 x 的每个位置,我想计算有多少数字 > 5。 这是我的代码,使用 for 循环:
x<-c(2,8,4,9,10,6,7,3,1,5)
y <- vector()
for (i in seq_along(x)) {
x1 <- x[1:i]
y <- c(y, length(x1[x1>5]))
}
> y
[1] 0 1 1 2 3 4 5 5 5 5
你能帮我用 purrr 来做吗?这里可以用purrr::reduce吗?
cumsum
函数可以做到这一点
cumsum(x>5)
#[1] 0 1 1 2 3 4 5 5 5 5
您可以使用 purrr
中的 accumulate()
:
accumulate(x > 5, `+`)
#[1] 0 1 1 2 3 4 5 5 5 5
它基本上是 Reduce()
和 accumulate = TRUE
accumulate <- function(.x, .f, ..., .init) {
.f <- as_function(.f, ...)
f <- function(x, y) {
.f(x, y, ...)
}
Reduce(f, .x, init = .init, accumulate = TRUE)
}