group-telegram.com/R4marketing/1332
Create:
Last Update:
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
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/BANrp1xhZpa68GN6LX68kXk3lCdzIKcS6eclk91tfyRqdnLKFS_0KQqyrxLPZNtmaW_7iDsEbdDK6gzTek26W-tET-eaPdOIyR5A2W5L6AUNiL9Es9lulKaTnn3_-WOkQXXL_R9RKklMz4hmQS8Exj7mATcqWlv2FrGCTWt_ecurliNkUsuqINFj_rQvEEjcgafG3XRZP93OBpg0zCFvweNVZFLPPB_-D88pu8jjVUH0NFGyMaLqgkhAOwHpCaEbZQrQXMqthnfISxpu6RkNM2ZcjJkD5xXZV5g3wWg1Bk-eWpZqTovyzWOuioBZy-aTGf34ehcBxnszpylEADPEYw.jpg)
Share with your friend now:
group-telegram.com/R4marketing/1332