2

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 を使用できますか?

4

2 に答える 2

6

cumsum関数はこれを行うことができます

cumsum(x>5)
#[1] 0 1 1 2 3 4 5 5 5 5
于 2016-10-22T06:20:32.677 に答える
6

accumulate()から使用できますpurrr

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)
}
于 2016-10-22T10:50:43.517 に答える