понедельник, 3 июня 2013 г.

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

Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/compound-assignment/.


Продолжаем писать полезные операторы для языка 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
Разумеется, ничего не мешает определить по аналогии %*=%, %/=% и тому подобные замечательные операторы.