Множественное присваивание в R
Множественное присваивание горячо любимо пользователями Python, оно даёт возможность присвоить одновременно значения сразу нескольким объектам. Этот приём в Python используется например для обмена значений между двумя переменными, не используя при этом третью, временную переменную.
Множественное присваивание также иногда называют распаковочным, параллельным или деструктирующим.
В базовом R аналога этой операции нет, но как мы помним, в R на любой чих есть готовый пакет, для множественного присваивания можно использовать оператор %<-% из пакета zeallot.
Ниже несколько примеров его использования:
# распаковываем список или вектор
c(lat, lng) %<-% list(38.061944, -122.643889)
c(lat, lng) %<-% c(38.061944, -122.643889)
# распаковываем результат выполнения функции
c(min_wt, q1_wt, med_wt, mean_wt, q3_wt, max_wt) %<-% summary(mtcars$wt)
# ещё один пример распаковки функции
coords_list <- function() {
list(38.061944, -122.643889)
}
c(lat, lng) %<-% coords_list()
# используем в паре с lapply
quartet <- lapply(1:4, function(i) anscombe[, c(i, i + 4)])
c(an1, an2, an3, an4) %<-% lapply(quartet, head, n = 3)
# распаковка вложенных списков
c(a, c(b, d), e) %<-% list("begin", list("middle1", "middle2"), "end")
# распаковка даты
c(y, m, d) %<-% Sys.Date()
# меняем местами значения
# без использования временной переменной
c(first, last) %<-% c("Ai", "Genly")
c(first, last) %<-% c(last, first)
Ссылки:
- все примеры кода подсмотрены в виньетке "Unpacking Assignment".
#заметки_по_R