[02-2] R언어 - 연산 (Arithmetic)

Language/R 2017.12.06 14:17 posted by TechNote.kr


R언어에서의 연산은 여타 다른 언어의 연산과는 조금 다른 측면이 있다. 


  1. 기본 연산
  2. 연산자



기본 연산


R언어는 간단하게 변수에 정수값을 할당하여도 vector 형식의 object로 관리한다. 


> a = 1
> is.vector(a)
[1] TRUE


가장 기본적인 object 형태라고 볼 수 있는데, R언어의 연산을 설명하기 위하여 vector 기반으로 설명하고자 한다.


간단한 예를 보면 다음과 같다. 

> n1 = c(1,2,3,4,5,6,7,8,9)
> n2 = c(1,2,3,4,5,6,7,8,9)
> n1 + n2
[1]  2  4  6  8 10 12 14 16 18


좀 더 복잡한 예를 보면 다음과 같다. 

> n1 = c(1,2,3,4,5,6,7,8,9)
> n2 = c(1,2,3,4,5,6,7,8,9)
> n1*2+n2+1
[1]  4  7 10 13 16 19 22 25 28


위의 예와 같이 같은 위치에 있는 항목끼리 계산을 하고 숫자의 경우 모든 항목을 대상으로 계산하게 된다. 


계산하고자 하는 vector (혹은 또다른 형태의 object)의 크기가 같다면 별 다른 어려움없이 연산이 가능하다. 

하지만 만약 크기가 다른 vector끼리 계산을 하게 되면 어떻게 될 것인가.


> a1 = c(1,2,3,4)
> a2 = c(1,2)
> a1 + a2
[1] 2 4 4 6


연산시 상대적으로 작은 vector가 반복되어 큰 vector의 크기에 맞춘다. 

즉, 위의 예는 아래와 같이 볼 수도 있는 것이다. 

> a1 = c(1,2,3,4)
> a2 = c(1,2,1,2)
> a1 + a2
[1] 2 4 4 6


같은 맥락으로 하나의 숫자와 vector를 더했을 경우 해당 숫자는 vector의 크기만큼 반복되어 계산되는 것이라 이해하면 된다.

> a1 = c(1,2,3,4)
> a2 = 1
> a1 + a2
[1] 2 3 4 5


> a1 = c(1,2,3,4)
> a2 = c(1,1,1,1)
> a1 + a2
[1] 2 3 4 5



그렇다면 만약 큰 vector의 크기가 작은 vector 크기의 배수가 되지 않을 경우는 어떻게 될까.

아래의 예와 같이 계산이 되기는 하지만 warning이 발생하는 것을 확인할 수 있다. 

> a1 = c(1,2,3,4)
> a2 = c(1,2,3)
> a1 + a2
[1] 2 4 6 5
Warning message:
In a1 + a2 :
  longer object length is not a multiple of shorter object length




연산자


R언어에서 사용하는 기본적인 연산자는 '+, -, *, /, ^' 이다. 


'+' : 덧셈 연산자

'-' : 뺄셈 연산자

'*' : 곱셈 연산자

'/' : 나눗셈 연산자

'^' : 제곱 연산자

각 연산자에 대한 예는 다음과 같다. 


덧셈의 예)

> a1 = c(1,2,3,4)
> a2 = c(1,2,3,4)
> a1 + a2
[1] 2 4 6 8


뺄셈의 예)
> a1 = c(1,2,3,4)
> a2 = c(1,2,3,4)
> a1 - a2
[1] 0 0 0 0


곱셈의 예)
> a1 = c(1,2,3,4)
> a2 = c(1,2,3,4)
> a1 * a2
[1]  1  4  9 16


나눗셈의 예)
> a1 = c(1,2,3,4)
> a2 = c(1,2,3,4)
> a1 / a2
[1] 1 1 1 1


제곱의 예)
> a1 = c(1,2,3,4)
> a2 = c(1,2,3,4)
> a1 ^ a2
[1]   1   4  27 256