1-1. 숫자 벡터의 생성과 연산
R에는 벡터, 행렬, 배열, 리스트, 데이터 프레임 등 다양한 자료의 저장 방법이 있다.
이 중 벡터는 같은 형태의 자료를 모아놓은 1차원 형태의 자료 저장 방법이므로 벡터를 통해 먼저 R을 배워보자.
1. 숫자 벡터 정의하기
먼저, 10, 5, 3, 4, 21을 값으로 가지는 숫자 벡터 x를 생성해보자.
여러개의 값들을 묶어서 벡터를 만들 때는 연결함수인 c (concatanation function)를 사용한다.
(만들고자하는 벡터의 이름) <- c (값1, 값2, ... ,값n) 혹은
(만들고자하는 벡터의 이름) = c (값1, 값2, ... ,값n)
의 형태로 생성하면 된다.
* r도 값을 생성하는 것과 값을 확인하기 위해 출력(print)하는 것은 다르다. 이는 파이썬과 같다.
(결과값은 밑 창에 나와있다.)
이와 비슷한 기능을 하는 함수에는 assign 함수가 있다. assign 함수와 c는 비슷한 기능을 가진다.
assign(만들고자하는 벡터의 이름, c(값1, 값2, ... ,값n))
(9번째 줄 코드에 큰 따옴표가 붙은 이유는 z가 숫자변수가 아닌 문자변수이기 때문이다.)
의 형태로 생성하면 된다.
하지만 c 함수가 assign 함수보다 간단하기 때문에 숫자 벡터를 생성할 때는 주로 c를 사용한다.
이미 정의되어 있는 벡터를 이용하여 새로운 벡터를 정의할 수 있다.
위에서 이미 생성한 벡터 x를 이용해 새로운 벡터 y를 만들어보자.
또한, 위 실행결과에서 우리는 추가적인 정보들을 알 수 있다.
1. c 함수의 입력값으로 숫자뿐만 아니라 벡터가 입력될 수도 있다.
2. 벡터의 값에는 순서가 있다.
2. 숫자 벡터의 기본 산술 연산자
아래와 같이 숫자간의 연산은 다른 프로그램과 똑같이 가능하다.
또한, 숫자 벡터간(숫자의 그룹)의 연산도 가능하다.
숫자 벡터간의 연산을 통해 기본 산술 연산자를 알아보자.
먼저 위에서 배웠던 c 함수를 이용해 벡터 A와 B를 생성하자.
9~10번 줄은 벡터 A와 B를 생성하는 코드이고, 11~12번째 줄은 벡터 A와 B의 값을 확인하는 코드이다.
벡터간의 연산을 기본 연산자(덧셈, 뺄셈, 곱셈, 나눗셈)을 이용해 확인해보자.
길이가 같은 벡터에서는 같은 위치의 원소끼리 연산자에 해당되는 값을 계산한다.
예를 들어, A =(1,2,3) B=(4,5,6)일 때
A*B를 계산한 벡터의 원소는 (1x4, 2x5, 3x6)이다.
벡터의 거듭제곱 또한 "길이가 같은 벡터에서는 같은 위치의 원소끼리 연산자에 해당되는 값을 계산한다"는 규칙을 따른다.
거듭제곱은 ^ 혹은 ** 기호를 사용해 계산할 수 있다.
나누기 연산에서 나머지를 구하기 위해서는 %%, 몫을 구하기 위해서는 %/% 연산자를 이용한다.
Q. 연산하고자 하는 숫자 벡터 두개가 서로 길이가 다르다면 r에서는 어떤 결과를 출력할까?
경우1. 연산하고자 하는 두 벡터가 서로 배수관계에 있지 않다면 (예: 길이가 5인 벡터와 길이가 11인 벡터, 길이가 7인 벡터와 길이가 15인 벡터)출력창에 "긴 벡터의 길이가 짧은 길이의 벡터와 길이가 서로 배수관계에 있지 않습니다"라는 경고문이 뜬다. 경고문이 뜨지만 결과가 출력되는데, 이는 짧은 벡터가 recycle되어 계산되었기 때문이다.
길이가 상대적으로 짧은 벡터가 가장 긴 길이의 벡터의 길이에 맞춰 반복되어 긴 벡터의 길이가 되도록 만들어진다.
예를 들어, 길이가 5인 벡터와 길이가 11인 벡터를 연산한다면 길이가 5인 벡터가 두번 반복되고, 첫번째 원소가 이용되어 길이가 11로 맞춰진다. (5x2+1=11)
경우2. 연산하고자 하는 두 벡터가 서로 배수관계에 있다면
(예: 길이가 5인 벡터와 길이가 10인 벡터, 길이가 7인 벡터와 길이가 14인 벡터)
경고문이 뜨지 않고 짧은 벡터가 recycle되어 계산된다.
총정리
이번 시간에 배운 함수는 다음과 같다