2016-10-22 2 views
2

Для каждого положения х, я хочу, чтобы подсчитать, сколько чисел было> 5. Вот мой код, используя для цикла:Использование purrr применить интегральную функцию

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 :: уменьшить использовать здесь?

ответ

5

Вы можете использовать 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) 
} 
6

cumsum функция может сделать это

cumsum(x>5) 
#[1] 0 1 1 2 3 4 5 5 5 5 
+0

@ Брани попросил решение, которое использует функции purrr. – amarchin

+2

@amarchin Я добавил подход, использующий 'base R', потому что я считаю, что никто не добавляет пакет, когда это можно сделать с использованием базовой функции, если только это не дает огромного преимущества. – user2100721

Смежные вопросы