[R] 연산자(Operator) 종류 및 사용법 - 고급편

해당 포스트는 R 연산자 종류 및 사용법 - 고급편을 소개합니다.

r-operator


Lists
[R] 연산자(Operator) 종류 및 사용법 - 기초편
[R] 연산자(Operator) 종류 및 사용법 - 초급편
[R] 연산자(Operator) 종류 및 사용법 - 중급편
[R] 연산자(Operator) 종류 및 사용법 - 고급편


INTRO

R을 사용하면서 프로그래밍 스킬도 중요하지만 함수 및 연산자에 대한 이해만 가지더라도 효율적인 R활용이 가능합니다. 이번 포스트에서는 R에서 기본적으로 제공하는 연산자들을 소개하고 예시와 함께 사용법을 설명합니다.


참고로 이번에 설명하는 연산자들은 magrittr 패키지에서 제공되는 연산자들입니다.

1. +, %+replace%

R에서 + 연산자는 기본적으로 두 수의 합을 계산하지만, ggplot2 패키지에서는 layer들을 중첩하여 쌓을 수 있도록 도와주는 역할을 합니다.예를 들어, ggplot2에서 e1 + e2의 문법은 e2 속성값들 중 e1과 겹치는 속성값들을 e2 속성값으로 변경하게 되며, 그 뒤에 + 연산자로 layer를 추가한다면 반복적으로 설정값들이 갱신된다고 생각하면 됩니다. (layer 들을 overlap 하여 쌓는데 '겹치는 부분은 교체한다' 고 생각하시면 될 것 같습니다.)

참고 : ggplot2 철학 이해하기


ggplot2에서는 %+replace% 함수를 추가로 제공하고 있습니다. 해당 함수는 일반적인 ggplot2 문법(e1 + e2)과 동일하게 사용하며, 우측에 있는 e2에 속하지 않는 속성들은 다 NULL로 reset 해 주기에, custom theme 설정시 초기화가 필요한 경우에 많이 사용합니다.


아래 코드는 theme_grey() 설정 후 'Times' 폰트(family)를 설정하는 코드입니다. %+replace% 연산자를 사용한 코드에서는 폰트(family)를 제외한 타 속성값들이 NULL로 초기화 된 것을 볼 수 있습니다.

library(ggplot2)

add_el <- theme_grey() +
  theme(text = element_text(family ='Times'))
add_el$text 
List of 11
 $ family       : chr "Times"
 $ face         : chr "plain"
 $ colour       : chr "black"
 $ size         : num 11
 $ hjust        : num 0.5
 $ vjust        : num 0.5
 $ angle        : num 0
 $ lineheight   : num 0.9
 $ margin       : 'margin' num [1:4] 0points 0points 0points 0points
  ..- attr(*, "unit")= int 8
 $ debug        : logi FALSE
 $ inherit.blank: logi FALSE
 - attr(*, "class")= chr [1:2] "element_text" "element"
rep_el <- theme_grey() %+replace%
  theme(text = element_text(family ='Times'))
rep_el$text 
List of 11
 $ family       : chr "Times"
 $ face         : NULL
 $ colour       : NULL
 $ size         : NULL
 $ hjust        : NULL
 $ vjust        : NULL
 $ angle        : NULL
 $ lineheight   : NULL
 $ margin       : NULL
 $ debug        : NULL
 $ inherit.blank: logi FALSE
 - attr(*, "class")= chr [1:2] "element_text" "element"

2. %<-%

파이썬(Python)에서는 a, b, c = x, y, z 형태의 입력이 가능하기에 여러 변수를 한 라인에서 정의할 수 있습니다. R에서는 zeallot 패키지의 %<-% 연산자를 이용하여 해당 문법을 사용할 수 있습니다.

library(zeallot)

mylist <- list(x = 3, y = 4)
c(a, b) %<-% mylist
a; b;
[1] 3
[1] 4

참고 : https://github.com/r-lib/zeallot

3. <<-

<<- 연산자는 assign 연산자로 전역 변수를 설정할 때 사용합니다. 아래 예시에서는 기 정의된 변수 x와 함수 안에서 재정의된 지역 변수 x를 비교하며, 함수 내 전역 변수 할당 시 함수 안(local)의 x는 변경되지 않았지만 기 정의되었던 x는 변경된 것을 볼 수 있습니다.

x <- 3

myf <- function(){
  x <- 3
  x <<- 2
  y <- x * 2
  return(y)
}

myf()
[1] 6
x
[1] 2

4. :::

R에서 특정 패키지의 함수를 사용하려는 경우, 패키지명::함수명의 형태로 사용합니다. 이러한 사용법은 패키지에서 공식적으로 제공하는 함수(public function)에 해당하며, 만약 내부 연산을 위해 생성된 함수(private function)를 사용하려는 경우에는 콜론(:) 3개를 사용하여 함수명을 사용(패키지명:::함수명)하면 됩니다.

5. 사용자 연산자

사용자 함수와 같이 연산자(Operator)도 개인이 생성 및 사용할 수 있습니다. 아래 예시는 파이썬에서 + 연산자로 텍스트를 이어붙이는 기능을 사용자 연산자(%+%)로 구현하는 예시입니다.

'%+%' <- function(a, b){
  paste(a, b)
}

"my" %+% "first" %+% "operator"
[1] "my first operator"

관련 링크

[1] 슬기로운통계생활 Youtube - 이거 외계어 아니야? R 연산자 (operator) 부시기! 고급편!
[2] [R] 연산자(Operator) 종류 및 사용법 - 기초편
[3] [R] 연산자(Operator) 종류 및 사용법 - 초급편
[4] [R] 연산자(Operator) 종류 및 사용법 - 중급편
[5] [R] 연산자(Operator) 종류 및 사용법 - 고급편