본문 바로가기

R프로그래밍

[R프로그래밍] 벡터 구조 Ⅰ(인덱싱, length, 재사용, 산술 및 콜론연산)

데이터 구조(벡터, 행렬, 리스트, 데이터프레임) 특집 - 벡터 첫번째

 

 

 

< 벡터 >

벡터는 모든 원소가 같은 데이터 속성을 갖는 1차원 데이터 구조이다.

행렬은 matrix, 리스트는 list, 데이터프레임은 data.frame으로 변수를 선언할 때 데이터 구조를 컴퓨터에게 알려주어야 하지만, 벡터는 별도로 알려주지 않아도 벡터로 인식한다.

 

벡터를 생성할 때는 값을 바로 넣어주면 되고, 여러 개의 값을 넣어줄 때는 c( ) 연결함수를 통해 생성할 수 있다.

 

# 벡터 선언
x <- c(88, 5, 12, 13)
x

 

 

 

 

< 벡터 인덱싱 >

벡터 안에 값이 여러 개 일때 특정 위치에 있는 값이 무엇인지 확인해야 할 경우에 사용한다. 연산자 [ ]를 이용한다.

다른 프로그래밍 언어는 순서를 셀 때 0부터 세지만 R은 1부터 순서를 매긴다.

 

# 벡터 인덱싱
x <- c(88, 5, 12, 13)

x[2]  # 두번째 값 인덱싱
x[2:4] # 두번째부터 네번째 값 인덱싱

 

 

 

 

< 벡터 원소 추가 및 삭제 >

벡터의 크기는 처음 생성될 때 정해진다. 따라서 원소를 추가하거나 삭제하려면 벡터를 새로 할당하면 된다.

(같은 변수 이름으로 중복해서 덮어쓰기)

 

# 벡터 원소 추가 및 삭제
x <- c(88, 5, 12, 13)  
x <- c(x[1:3], 168, x[4])   # 위의 x변수에서 3번째와 4번째값 사이에 168이라는 값을 추가
x

x <- c(x[1:3], x[5])  # 추가했던 168 다시 삭제
x

 

 

위 예시처럼 벡터 사이에 원소를 추가 하기 위해서는 기존의 벡터를 나누고 새로운 벡터와 함께 하나의 벡터로 묶어서 연결 할 수 있다. 컴퓨터 상에서는 실제로 원소를 추가하는게 아니고 새롭게 만든 벡터를 기존 변수에 덮어쓰기 한 것이다.  (삭제도 마찬가지)

 

※ 가끔 덮어쓰기 하는 이 기능은 R의 빠른 성능을 제한하는 요인으로 작용하기도 한다.

 

 

 

< 벡터 길이 >

벡터의 길이를 파악하는 연산자는 length( ) 를 사용하면 된다.

 

# 벡터의 길이
y <- c(1:10, 90:100) 
y

length(y)  # 벡터 y의 길이 확인

 

 

위와 같이 생성한 y 벡터의 길이가 21이라는 것을 알 수 있다.

length( )는 길이가 궁금할 때도 사용하지만, 반복문이나 조건문을 사용할 때도 유용하게 쓸 수 있다.

 

 

 

< 벡터 산술연산 >

벡터가 두개 이상일 때 벡터간에도 덧셈과 뺄셈 등 산술연산을 할 수 있다.

벡터 간의 산술연산은 벡터를 구성하고 있는 원소 단위로 매칭해서 진행된다.

 

연산자는 다음과 같다.

 

덧셈연산 +
뺄셈연산 -
곱셈연산 *
나눗셈연산(몫) /
나눗셈연산(나머지) %%

 

위 연산자에서 나눗셈 연산자는 두가지 이다. 

나누고 남은 몫을 구하는 연산자는 / 이고, 나눈 나머지 값을 구하는 연산자는 %% 이다.

예) 7 %% 2 는 7을 2로 나눌 때 3번 나누고 남은 값이 1이므로 1이 출력

 

 

# 벡터 산술연산
x <- c(2, 4, 8)
y <- c(2, 2, 2)

x+y
x-y
x*y
x/y
x%%y

 

 

 

 

< 벡터 재사용 >

길이가 다른 두 벡터를 산술연산한다면, 두 길이를 같게 해주기 위해 길이가 짧은쪽 벡터를 처음부터 다시 재사용해서 긴쪽 벡터에 맞춰준다.

 

# 벡터 재사용
x <- c(1, 2, 3)
y <- c(1, 2, 3, 4, 5)

x+y

 

 

 

 

< 벡터 콜론(:)연산 >

콜론(:)연산은 일정 범위의 숫자로 이루어진 벡터를 생성하는 기능을 한다.

주의할점은 콜론(:)연산이 산술연산(+,-,*,/,%%)보다 우선순위가 높다. 수학에서 더하기 빼기보다 곱하기 나누기가 더 우선순위가 높은 것과 같은 개념이다.

 

# 콜론(:)연산
5:8
5:1

i <- 3  #i에 3대입

1:i-1 # 1:i를 먼저 계산하고, -1 계산
1:(i-1)  # i-1을 먼저 계산하고, 콜론(:) 연산 수행