[r] R : + = (플러스 같음) 및 ++ (플러스 플러스)는 c ++ / c # / java 등에서 동등합니까?

c ++ / c # / others와 같이 R에 +=(plus equals) 또는 ++(plus plus) 개념 이 있습니까?



답변

아니오, 그렇지 않습니다 : R 언어 정의 : 연산자


답변

@ GregaKešpret에 따라 infix 연산자를 만들 수 있습니다.

`%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2))
x = 1
x %+=% 2 ; x


답변

R에는 increment operator(예를 들어 C의 ++와 같은) 개념이 없습니다 . 그러나 다음과 같이 직접 구현하는 것은 어렵지 않습니다.

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

이 경우에는

x <- 10
inc(x)

그러나 함수 호출 오버 헤드가 발생하므로 직접 입력하는 것 보다 느립니다x <- x + 1 . 내가 실수하지 않으면 increment operator컴파일러 작업을 쉽게하기 위해 코드가 해당 기계 언어 명령어로 직접 변환 될 수 있기 때문에 소개되었습니다.


답변

R의 (대부분) 객체는 변경할 수 없으므로 R에는 이러한 연산이 없습니다. 그들은 변하지 않습니다. 일반적으로 객체를 수정하는 것처럼 보일 때 실제로 사본을 수정하는 것입니다.


답변

10 씩 증가 및 감소

require(Hmisc)
inc(x) <- 10

dec(x) <- 10


답변

우리는 이런 종류의 일을 돕기 위해 로프 로터 패키지를 출시했습니다. 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


답변

재정의 할 수 있습니다 +. 단항 +을 사용하고 인수 자체가 단항 +호출 인 경우 호출 환경에서 관련 변수를 증가시킵니다.

`+` <- function(e1,e2){
    # if unary `+`, keep original behavior
    if(missing(e2)) {
      s_e1 <- substitute(e1)
      # if e1 (the argument of unary +) is itself an unary `+` operation
      if(length(s_e1) == 2 &&
         identical(s_e1[[1]], quote(`+`)) &&
         length(s_e1[[2]]) == 1){
        # increment value in parent environment
        eval.parent(substitute(e1 <- e1 + 1,list(e1 = s_e1[[2]])))
      # else unary `+` should just return it's input
      } else e1
    # if binary `+`, keep original behavior
    } else .Primitive("+")(e1,e2)
}

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

다른 작업은 변경되지 않습니다.

x + 2
# [1] 13
x ++ 2
# [1] 13
+x
# [1] 11
x
# [1] 11

모든 것을 느리게 할 수는 있지만 그렇게하지 마십시오. 또는 다른 환경에서 수행하고이 지침에 큰 고리가 없는지 확인하십시오.

당신은 또한 이것을 할 수 있습니다 :

`++` <- function(x) eval.parent(substitute(x <-x +1))
a <- 1
`++`(a)
a
# [1] 2