Telegram Group & Telegram Channel
Рекурсивные операции в R: Магия функции accumulate()

accumulate() из пакета purrr - потрясающий инструмент для выполнения рекурсивных вычислений в R. Давайте рассмотрим три последовательных примера от простого к сложному.

1. Пример 1: Накопительная сумма

library(purrr)

# Простейший пример накопления суммы
numbers <- 1:5
result <- accumulate(numbers, `+`)
# Результат: [1] 1 3 6 10 15


Как это работает?:

● Начинает с первого элемента (1)
● Каждый следующий шаг - сумма предыдущего накопленного результата и текущего элемента
● 1 → (1+2=3) → (3+3=6) → (6+4=10) → (10+5=15)

Пример 2: Генерация последовательности Фибоначчи

fibonacci <- accumulate(1:10, function(acc, _) {
c(acc[2], sum(acc))
}, .init = c(0, 1))

# Результат: последовательность Фибоначчи
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]


Детали реализации:

.init устанавливает начальное состояние
● На каждой итерации берем второй элемент и сумму
● Создаем классическую последовательность Фибоначчи

Пример 3: Сложная трансформация данных

library(dplyr)

# Имитация сложного бизнес-процесса
transactions <- list(
list(amount = 100, tax_rate = 0.1),
list(amount = 200, tax_rate = 0.15),
list(amount = 150, tax_rate = 0.12)
)

total_calculation <- accumulate(transactions, function(acc, transaction) {
list(
total_amount = acc$total_amount + transaction$amount,
total_tax = acc$total_tax + (transaction$amount * transaction$tax_rate),
processed_count = acc$processed_count + 1
)
}, .init = list(
total_amount = 0,
total_tax = 0,
processed_count = 0
))

# Финальный результат в последнем элементе
final_result <- total_calculation[[length(total_calculation)]]


Сценарий:

● Накапливаем статистику по транзакциям
● Считаем общую сумму, налоги, количество обработанных записей
● Используем аккумуляцию для последовательной обработки

————————————
В пакете purrr помимо accumulate() есть множество других полезных функционалов, которые могут заменить вам циклы for, и сделать ваш код более читабельным и оптимизированным.

Тему циклов и функционалов я подробно рассматривал в бесплатном курсе "Циклы и функционалы в языке R", так что если есть желание погрузится в эту тему то велкам!

#заметки_по_R



group-telegram.com/R4marketing/1332
Create:
Last Update:

Рекурсивные операции в R: Магия функции accumulate()

accumulate() из пакета purrr - потрясающий инструмент для выполнения рекурсивных вычислений в R. Давайте рассмотрим три последовательных примера от простого к сложному.

1. Пример 1: Накопительная сумма

library(purrr)

# Простейший пример накопления суммы
numbers <- 1:5
result <- accumulate(numbers, `+`)
# Результат: [1] 1 3 6 10 15


Как это работает?:

● Начинает с первого элемента (1)
● Каждый следующий шаг - сумма предыдущего накопленного результата и текущего элемента
● 1 → (1+2=3) → (3+3=6) → (6+4=10) → (10+5=15)

Пример 2: Генерация последовательности Фибоначчи

fibonacci <- accumulate(1:10, function(acc, _) {
c(acc[2], sum(acc))
}, .init = c(0, 1))

# Результат: последовательность Фибоначчи
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]


Детали реализации:

.init устанавливает начальное состояние
● На каждой итерации берем второй элемент и сумму
● Создаем классическую последовательность Фибоначчи

Пример 3: Сложная трансформация данных

library(dplyr)

# Имитация сложного бизнес-процесса
transactions <- list(
list(amount = 100, tax_rate = 0.1),
list(amount = 200, tax_rate = 0.15),
list(amount = 150, tax_rate = 0.12)
)

total_calculation <- accumulate(transactions, function(acc, transaction) {
list(
total_amount = acc$total_amount + transaction$amount,
total_tax = acc$total_tax + (transaction$amount * transaction$tax_rate),
processed_count = acc$processed_count + 1
)
}, .init = list(
total_amount = 0,
total_tax = 0,
processed_count = 0
))

# Финальный результат в последнем элементе
final_result <- total_calculation[[length(total_calculation)]]


Сценарий:

● Накапливаем статистику по транзакциям
● Считаем общую сумму, налоги, количество обработанных записей
● Используем аккумуляцию для последовательной обработки

————————————
В пакете purrr помимо accumulate() есть множество других полезных функционалов, которые могут заменить вам циклы for, и сделать ваш код более читабельным и оптимизированным.

Тему циклов и функционалов я подробно рассматривал в бесплатном курсе "Циклы и функционалы в языке R", так что если есть желание погрузится в эту тему то велкам!

#заметки_по_R

BY R4marketing | канал Алексея Селезнёва | Язык R




Share with your friend now:
group-telegram.com/R4marketing/1332

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

Although some channels have been removed, the curation process is considered opaque and insufficient by analysts. In 2014, Pavel Durov fled the country after allies of the Kremlin took control of the social networking site most know just as VK. Russia's intelligence agency had asked Durov to turn over the data of anti-Kremlin protesters. Durov refused to do so. Messages are not fully encrypted by default. That means the company could, in theory, access the content of the messages, or be forced to hand over the data at the request of a government. And while money initially moved into stocks in the morning, capital moved out of safe-haven assets. The price of the 10-year Treasury note fell Friday, sending its yield up to 2% from a March closing low of 1.73%. After fleeing Russia, the brothers founded Telegram as a way to communicate outside the Kremlin's orbit. They now run it from Dubai, and Pavel Durov says it has more than 500 million monthly active users.
from us


Telegram R4marketing | канал Алексея Селезнёва | Язык R
FROM American