본문 바로가기
프로그래밍언어(코딩)/R

[R 공략집] 벡터

by 북마크한 취미생활 2020. 8. 20.

데이터(값)가 저장되기 위해서는 데이터를 집어넣는 상자가 필요하다고 지난 포스팅을 통해 이야기드렸습니다. 또한, '데이터 형'에 따라서 그에 맞는 테이터 형태의 상자가 준비되어야 한다고도 말씀드렸습니다. 그렇기 때문에 정수형 데이터를 할당하기 위해서는 '정수형 상자'가, 문자 데이터를 할당하기 위해서는 '문자형 상자'가 필요한 것입니다. 이 부분에 대해 잘 이해가 안 되시는 분은 '데이터 타입' 포스팅을 한 번 더 보시고 이번 포스팅을 보시면 도움이 될 것이라 생각합니다.

개인적으로 벡터는 R 프로그래밍을 익힐 때 '드디어 데이터를 마음대로 가지고 놀고 있다'는 생각이 들어 재미있게 본 데이터 형이었습니다. 하지만, 제 설명이 너무 노잼이라 포스팅을 보시는 분들이 벡터에 재미를 느끼실지는 모르겠습니다. 재미가 없다면 다 제가 설명을 못해서 그런 것입니다. (웃음)

R 프로그래밍은 기능이 많이 있어, 익혀야 할 것이 많긴 하지만, 그만큼 한번 제대로 익히면 활용도가 많이 높아집니다. 그중에서 기본이라 생각되고 많은 부분에 활용할 수 있는 유용한 벡터에 대해 본격적으로 알아보도록 하겠습니다.

| 벡터란

벡터는 '동일한 데이터형 박스가 연속해서 있는 것'입니다.
아래 그림과 같이 정수형 상자가 여러 개 붙어 있다면 이는 정수형 벡터가 됩니다. 혹은 문자형 상자가 연속적으로 붙어 있다면 이는 문자형 벡터가 됩니다. 

참고로 위의 벡터 상자 그림을 보면, 이름표가 이전과는 다르게 붙어 있습니다. 이것은 벡터의 특성을 쉽게 이해하기 위한 것으로 이 부분은 이후 포스팅에서 자세히 설명드리도록 하겠습니다.

| 벡터 생성

벡터를 생성하기 위해서는 'c()' 함수를 이용합니다. c() 함수의 c는 combine(결합하다)을 의미합니다.
이제 실제적으로 정수형 벡터를 만들어 보겠습니다. '[Ctrl] + [L]' 키를 눌러 R console 창을 클리어 시킵니다. R console 창에서 아래의 코드를 입력합니다.

a <- c(1,2,3,4,5,6,7,8,9,10)	# 정수형 벡터 생성
a 	# 값 확인

▲ a 상자에 1부터 10까지 값이 들어 있음을 볼수 있습니다

정수형 벡터 a에는 1부터 10까지 숫자가 있는 것을 확인할 수 있습니다.

지난번 포스팅에서 한동안은 결과 출력 앞에 '[1]'을 무시하자고 말씀드렸는데, 그동안 이 부분에 대해서 궁금하셨을 것이라 생각이 듭니다. 지금 왜 결괏값 앞에 [1]이 표기가 되었는지를 설명드리도록 하겠습니다.

마우스로 RStudio를 아래와 같이 결괏값이 출력되도록 크기를 줄입니다. (결괏값이 두 줄에 걸쳐 출력되도록 화면 크기를 조절하면 됩니다.)

크기를 줄였다면 console에 벡터 값을 출력하기 위해 a를 다시 입력하고 [Enter] 키를 누릅니다.

결과를 출력해 보면 이전과는 다르게 결과 아래줄에 [ ] 괄호에 번호가 한 개가 출력이 됩니다. 아마 눈치가 빠르신 분들은 [ ] 안의 값이 무엇인지 눈치채셨을 텐데요.

결괏값의 [숫자]의 의미는 바로 결과 줄에 나오는 값이 변수 상자에 들어 있는 값 중에 몇 번째 위치 값인지를 알려주는 것입니다. 지금은 10개밖에 데이터가 없는데, 대량의 데이터를 출력할 때 출력된 라인이 몇 번째 데이터인지 알려주는 역할을 하기 때문에 데이터 파악에 유용한 역할을 합니다.

이제 다시 창 크기를 원래의 크기로 변경하고, '[Ctrl] + [L]' 키를 눌러 화면을 초기화시킵니다.
계속해서 문자형 벡터를 만들고, 값을 출력해 보겠습니다.

b <- c("a", "b", "c")	# 문자형 벡터
b
c <- c(TRUE, FALSE)	# 논리형 벡터
c

문자형과 논리형의 결과에서 보듯이 벡터형은 '동일한 데이터 형이 연속해서 들어있는 것'을 확인할 수 있습니다.

| 벡터 생성 시 주의점

벡터를 생성할 때 주의할 점은 '벡터 데이터는 동일한 자료형으로 구성된다'는 것입니다.. 이 이유는 앞서 벡터의 정의에 대해서 설명드렸듯이 벡터는 '동일한 데이터형 박스가 연속해서 있는 것'이기 때문입니다. 만약 동일한 데이터 형이 아니라면 R언어에서 자체적으로 동일한 데이터 형으로 변경을 합니다. 따라서 이를 인식하지 못하고 벡터를 생성한다면 생각 히지 못한 결과가 나오게 됩니다.

숫자형에서 정수와 실수 섞여 있다면, 이는 실수형으로 변경이 됩니다. 이를 확인하기 위해서 아래의 코드로 테스트해 보 보시길 바랍니다.

# 벡터 생성시 정수와 실수가 섞여 있는 경우
x <- c(1, 1.5, 2)
x

결과를 보면, 정수형(1과 2)이 모두 실수형(1.0, 2.0)으로 변경됨을 볼 수 있습니다.

벡터의 데이터가 모두 실수형으로 변경

또한 벡터에 문자형과 정수형이 섞여 있다면, 문자형으로 벡터가 생성이 됩니다.
(※ 문자형은 산술 연산이 되지 않기 때문에 벡터를 생성할 때 문자형과 숫자형의 데이터가 섞이지 않도록 유의해야 합니다.)

# 벡터 생성시 문자와 정수가 섞여 있는 경우
y <- c("x", "y", 1, 2)
y

벡터 생성이 이 부분만 잘 유념하시면 크게 어려움 없이 벡터를 생성하실 수 있을 겁니다.
참고로 벡터에 데이터 형이 다를 경우 변경 우선순위는 '문자형 > 실수형 > 정수형 > 논리형' 순입니다.

| 조금 더 깊게 이해하기

※ 지금 드리는 설명은 데이터형이 다른 벡터를 생성할 때 내부적으로 어떻게 처리되는지를 되는지는 이해를 돕고자 한 것으로 R 프로그래밍 내부적인 처리와 100% 동일하지는 않습니다. 이점 참고해 주시길 바랍니다.

'y <- c("x", "y", 1, 2)'처럼 문자형과 정수형 데이터가 섞여있는 데이터를 벡터로 생성한다면, 내부에서는 각각의 데이터 형에 맞는 상자를 만들 것입니다.

하지만 벡터는 '동일한 자료형으로 구성'되어 있어야 하기 때문에 동일한 데이터 형으로 맞추기 위해 정수형 상자를 모두 문자형 상자로 변경하고, '문자형 벡터 상자'로 만들게 됩니다. 그리고 정수형 데이터도 모두 문자형으로 변경됩니다.

데이터가 모두 문자형으로 변경되면, 문자형 벡터 상자에 문자형으로 변경된 데이터를 각각의 상자에 집어넣고, 최종적으로 문자형 벡터 상자에 이름표가 붙여지게 됩니다.

설명을 쉽게 드린다고 했는데, 역시 제 설명 스킬이 부족하여 포스팅을 보시는 분의 머릿속을 더욱더 혼돈으로 만든 것 같습니다. 마지막에 설명드린 '조금 더 깊이 이해하기'는 굳이 이해하지 않아도 상관없으니 '벡터는 동일한 데이터 형의 나열이다'는 것만 이해하셨다면 무시하셔도 됩니다.

지금까지 벡터와 간단한 벡터 데이터의 생성에 대해 알아보았습니다. 다음 포스팅에서는 조금 더 다양한 벡터의 생성에 대해 알아보겠습니다.

긴 글 읽어 주셔서 감사합니다.

반응형

댓글