Операторы +=, -= в R



Продолжаем писать полезные операторы для языка R. В большинстве современных языков есть операторы +=, -= и т.п., они делают синтаксис более лаконичным. А давайте и в R определим подобные операторы, чтобы вместо

x <- x + 3
y <- y - 2

мы могли бы писать:

x %+=% 3
y %-=% 2

Да ведь это очень просто. Новые операторы можно определить буквально в пару строк:

'%+=%' <- function(x, y) {
  mapply(assign, as.character(substitute(x)), x + y, MoreArgs = list(envir = parent.frame()))
  invisible()
}
'%-=%' <- function(x, y) {
  mapply(assign, as.character(substitute(x)), x - y, MoreArgs = list(envir = parent.frame()))
  invisible()
}

Теперь можно писать такой вот код:

a <- 3
a %+=% 2 # a <- a + 2
a # 5
a %-=% 1 # a <- a - 1
a # 4

Разумеется, ничего не мешает определить по аналогии %*=%, %/=% и тому подобные замечательные операторы.

Поделиться:
Исходный код поста находится на GitHub:
https://github.com/AndreyAkinshin/aakinshin.net/blob/master/web/_posts/ru/2013/r-compound-assignment.md