R: + = (плюс равно) и ++ (плюс плюс) эквивалент от С++/С#/java и т.д.?

Есть ли у R понятие += (плюс равно) или ++ (плюс плюс), как С++/С#/others?

+136
21 апр. '11 в 2:25
источник поделиться
7 ответов

Нет, это не так: R Определение языка: Операторы

+101
21 апр. '11 в 2:40
источник

Следуя @GregaKešpret, вы можете сделать оператор инфикса:

`%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2))
x = 1
x %+=% 2 ; x
+59
17 февр. '13 в 23:49
источник

R не имеет понятия increment operator (как, например, ++ в C). Однако, нетрудно реализовать их самостоятельно, например:

inc <- function(x)
{
 eval.parent(substitute(x <- x + 1))
}

В этом случае вы бы назвали

x <- 10
inc(x)

Однако он вводит служебные данные функции, поэтому медленнее, чем вводить x <- x + 1 самостоятельно. Если я не ошибаюсь, был введен increment operator, чтобы облегчить работу с компилятором, поскольку он может напрямую преобразовать код в эти инструкции машинного языка.

+32
21 апр. '11 в 2:51
источник

R не имеет этих операций, потому что (большинство) объектов в R неизменяемы. Они не меняются. Обычно, когда похоже, что вы изменяете объект, вы фактически изменяете копию.

+17
21 апр. '11 в 3:14
источник

Увеличение и уменьшение на 10.

require(Hmisc)
inc(x) <- 10 

dec(x) <- 10
+15
21 апр. '11 в 2:34
источник

Мы выпустили пакет, roperators, чтобы помочь с такими вещами. Вы можете прочитать больше об этом здесь: https://happylittlescripts.blogspot.com/2018/09/make-your-r-code-nicer-with-roperators.html

install.packages('roperators')
require(roperators)

x <- 1:3
x %+=% 1; x
x %-=% 3; x
y <- c('a', 'b', 'c')
y %+=% 'text'; y
y %-=% 'text'; y

# etc
+3
24 сент. '18 в 21:44
источник

Просто для удовольствия:

'+' <- function(e1,e2){
    if(missing(e2)) {
      s_e1 <- substitute(e1)
      if(length(s_e1) == 2 &&
         identical(s_e1[[1]], quote('+')) && 
         length(s_e1[[2]]) == 1){
        eval.parent(substitute(e1 <- e1 + 1,list(e1 = s_e1[[2]])))
      } else e1
    } else .Primitive("+")(e1,e2)
}

x <- 10
++x
x
# [1] 11

другие операции не меняются:

x + 2
# [1] 13
x ++ 2
# [1] 13
+x
# [1] 11
x
# [1] 11
+3
25 янв. '19 в 14:38
источник

Посмотрите другие вопросы по меткам или Задайте вопрос