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: |

Stocks closed in the red Friday as investors weighed upbeat remarks from Russian President Vladimir Putin about diplomatic discussions with Ukraine against a weaker-than-expected print on U.S. consumer sentiment. Telegram users are able to send files of any type up to 2GB each and access them from any device, with no limit on cloud storage, which has made downloading files more popular on the platform. I want a secure messaging app, should I use Telegram? Right now the digital security needs of Russians and Ukrainians are very different, and they lead to very different caveats about how to mitigate the risks associated with using Telegram. For Ukrainians in Ukraine, whose physical safety is at risk because they are in a war zone, digital security is probably not their highest priority. They may value access to news and communication with their loved ones over making sure that all of their communications are encrypted in such a manner that they are indecipherable to Telegram, its employees, or governments with court orders. Unlike Silicon Valley giants such as Facebook and Twitter, which run very public anti-disinformation programs, Brooking said: "Telegram is famously lax or absent in its content moderation policy."
from jp


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