- R Studio 프로그램에서는 스크립트를 이용해 명령어를 실행, 저장하도록 한다.
- R Studio에서 제공하는 스크립트를 기준으로 설명한다.
# (해시 기호)
주석 (Comment)의 기능
프로그램 전반적인 내용, 명령어의 내용 등이 무엇을 의미하는지 알 수 있도록 사용자가 설명을 달아주는 기능
# 뒤에 있는 한 줄이 주석으로 처리되면, R에서 지정된 문법을 검사하지 않는다.
; (세미콜론)
하나의 명령어가 끝났음을 알려주는 기능
한 줄에 하나의 명령 밖에 없으면 세미콜론을 해 주지 않아도 명령어가 끝났음을 인식한다.
Enter (엔터)
Ctrl + Enter (컨트롤 + 엔터)
R의 명령어를 실행하는 기능
명령어가 한 줄인 경우 마우스의 위치는 해당 줄의 아무 곳에 있어도 상관이 없다.
명령어가 두 줄 이상인 경우 반드시 해당 명령어가 있는 곳을 블록을 잡고 실행한다.
R GUI에서는 Ctrl + R
Shift + Enter (시프트 + 엔터)
동일한 위치에 다른 전달인자 (Argument)를 올 수 있도록 해준다.
Shift + Enter를 이용해서 명령어가 길게 표현되는 것을 방지한다.
대소문자
Ctrl + Enter로 실행할 수 있다.
enter를 기준으로 실행되는 것을 볼 수 있음
1개 이상의 수치에 대한 연산
더하기, 빼기, 곱하기, 나누기, 거듭제곱, 몫, 나머지를 구할 수 있다.
산술 연산자의 우선순위 (높은 순)
괄호 (( ))
거듭제곱(^(Caret), **)
곱하기(*), 나누기(/)
더하기(+), 빼기(-)
⭐ 동일한 우선순위의 산술 연산자가 나열된 경우 왼쪽이 오른쪽보다 우선순위를 갖게 된다.
어떤 객체의 이름(변수 이름, 데이터 이름)에 특정한 값을 저장할 때 사용하는 연산자
객체에 무엇이 있는지를 일부러 새로운 명령어를 실행하지 않아도 알 수 있는 기능
왼쪽 화살표와 =을 병행해서 사용한다.
->
는 잘 사용되지 않는다.비교 연산자의 종류
크다 A > B
크거나 같다
작다
작거나 같다
같다 ==
같지 않다 !=
아니다 !
두 개 이상의 조건을 비교하여 결과를 낸다.
&, &&는 모든 조건이 참일 때에만 최종적인 결과가 TRUE가 된다.
|, ||는 조건 중에서 하나라도 참이면 최종적인 결과가 TRUE가 된다.
벡터(Vector)가 오면 &와 &&의 결과 또는 |와 ||의 결과에는 차이가 발생한다.
&
AND의 개념
두 개(또는 그 이상)의 조건을 동시에 만족할 때만 TRUE가 되는 논리 연산
&는 데이터가 하나인 경우나 데이터가 두 개 이상인 경우
X = 1 : 3 (== X = (1,2,3)), Y = 5 : 7 -> (X > 3) && (Y > 3) -> (X: 1, y: 5) -> FALSE
&&
AND의 개념으로 두개(또는 그 이상)의 조건을 동시에 만족할 때만 TRUE가 되는 논리 연산
데이터가 하나인 경우에만 가능
벡터(Vector)인 경우 벡터(Vector)의 첫 번째만 작동하고 나머지는 작동하지 않음
X = 3, Y = 4 -> (X > 3) && (Y > 3) -> FALSE
|
OR의 개념
두 개(또는 그 이상)의 조건 중에서 하나만 만족하여도 TRUE가 되는 논리 연산
데이터가 하나인 경우나 두 개 이상인 경우
||
OR의 개념으로 두 개(또는 그 이상)의 조건 중에서 하나만 만족하여도 TRUE가 되는 논리 연산
데이터가 하나인 경우에만 가능
벡터(Vector)인 경우에는 벡터(Vector)의 첫 번째만 작동하고 나머지는 작동하지 않음
- R 에서 데이터의 기본적인 속성으로 데이터의 유형이 있음
- 데이터가 어떤 값(숫자, 문자)으로 이루어져 있는가를 의미
- 데이터 유형에는 기본적인 것과 특수한 형태로 구성
기본 데이터 유형
기본적인 데이터 유형에는 수치형, 문자형, 논리형, 복소수형이 있다.
수치형, 문자형, 논리형이 자주 사용
복소수형은 수학분야를 다룰 때에 사용
NULL
존재하지 않는 객체로 지정할 때 사용
NA
NaN
Not available Number 의 약자로 수학적으로 계산이 불가능한 수를 의미
예 : sqrt 3) 로 음수에 대한 제곱근은 구할 수 없다.
Inf
-Inf
mode() 함수
mode(데이터명)
문자형 형태로 최종적인 결과를 알려준다.
대표적인 데이터 유형(수치형, 문자형, 논리형, 복소수형)에는 우선순위가 있다.
벡터와 같은 데이터에서 발생한다.
벡터는 하나의 유형만 가질 수 있다.
벡터를 만들 때, 여러가지의 유형을 넣어도 최종적인 결과에는 하나의 유형으로 변경된다.
4가지 데이터 유형의 우선순위 (문자형 > 복소수형 > 수치형 > 논리형)
문자형(Character)
복소수형(Complex)
수치형(Numeric)
논리형(Logical)
데이터 유형 중 우선순위가 낮은 형태에서 우선순위가 높은 형태로는 강제적으로 유형 변환이 가능하다.
우선순위가 높은 형태에서 우선순위가 낮은 형태로의 변환은 일부만 가능하기 때문에 경우에 따라서 강제적으로 유형이 변경되지 않을 수 있다.
- R은 데이터가 어떤 구조(Structure) 또는 형태로 되어 있느냐에따라 벡터(Vector), 행렬(Matrix), 배열(Array), 데이터프레임(Data frame), 요인(Factor), 리스트(List) 등으로 구분됨
- 가장 대표적인 데이터 형태는 벡터(Vector)이다.
백터의 개념
백터는 동일한 데이터 유형으로 이루어진 한 개 이상의 값들로 구성
하나의 열(Column)로 되어 있다.
벡터는 데이터 분석의 가장 기본 단위이다.
- 두 개 이상의 값으로 이루어진 벡터를 생성할 때와 하나의 값으로 이루어진 벡터를 생성하는 방법이 다름
- 두 개 이상의 값으로 이루어진 벡터를 생성하는 것이 대표적인 방법
- c(), :, seq(), sequence(), rep()
c()
c() 함수는 combine 또는 concatenate의 약자
벡터를 생성하는 가장 대표적인 방법
네 가지 유형(수치형, 문자형, 논리형, 복소수형)에 적용 가능
규칙이 없는 데이터로 이루어진 벡터를 생성할 때 사용
수치형 벡터인 v1, 문자형 벡터인 v2, 논리형 벡터인 v3을 생성하면 다음과 같다.
c() 함수는 벡터들을 하나로 합쳐서 하나의 새로운 벡터를 생성할 수도 있음
새로운 v1 벡터와 v2를 생성, c() 함수를 이용하고, v1, v2 벡터를 연결하여 v3이라는 새로운 벡터를 생성할 수 있음
:
콜론(:)은 수치형에만 적용
1씩 증가되거나 1씩 감소되는 규칙이 있는 값으로 이루어진 벡터를 생성할 때 사용
start:end 구조로 사용
start, end는 숫자
start > end이면 1씩 감소
start < end이면 1씩 증가
start=end이면 start 또는 end가 된다.
시작은 무조건 start에서 시작, end를 넘지 않음
seq()
seq() 함수는 sequence의 약자
콜론(:)의 확장 또는 일반화
콜론(:)은 1씩 증가하거나 1씩 감소하는 수치형으로 이루어진 벡터를 생성하지만, seq() 함수는 1 이외의 증가 또는 감소가 되는 규칙 있는 수치형 벡터를 생성함
seq() 함수에는 from, to, by라는 argument가 있다.
R을 사용하면서 함수에 있는 argument는 가능하면 생략하지 않고 쓰도록 한다.
(함수 안에 있는 값들이 무엇인지 본인과 코드를 보는 다른 사람에게도 도움이 됨)
argument의 순서는 문법에 영향을 주지 않지만 최대한 순서를 중요하게 생각해서 작성하는 것을 추천
sequence()
sequence() 함수는 sequence(숫자) 형태로 사용
1과 지정한 ‘숫자’ 사이의 정수로 이루어진 수치형 벡터를 생성
rep()
rep() 함수는 replicate의 약자(복사하다, 반복하다의 뜻)
rep() 함수는 수치형, 문자형, 논리형, 복수형으로 된 벡터를 생성할 수 있음
rep() 함수에 지정된 데이터를 복사해 주는 기능
times = c(10,5)
는 앞의 "a"
를 10번, "b"
를 5번 복사하라는 의미이다.
- 벡터가 가지는 값 = 원소(Element)
- 원소들이 어떤 데이터 유형으로 이루어졌는지,
원소의 개수는 몇 개 인지, 원소의 이름은 어떻게 되어 있는지를 나타내는 것을 벡터의 속성이라고 함
mode(), is.numeric(), is.character(), is.logical(), is.complex()
함수를 사용함수의 사용방법
mode(벡터)
is.numeric(벡터)
is.character(벡터)
is.logical(벡터)
is.complex(벡터)
데이터 유형을 알아보는 방법
벡터가 몇 개의 원소(element)를 가지고 있는지를 원소의 개수(또는 데이터의 개수)라고 한다.
length() 함수를 사용하여 확인 가능하다.
기본적으로는 벡터의 원소에 대한 이름은 없으나 이름을 부여할 수 있다.
names() 함수를 사용
원소의 이름이 무엇인지 알 수 있다.
원소의 이름을 새롭게 부여할 수 있다.
names() 함수 사용방법(이름 확인하기)
names() 함수 사용방법(이름 부여하기)
벡터의 인덱싱
벡터가 가지는 원소들 중에서 일부의 원소를 추출할 때는 대괄호([]) 를 사용
대괄호 안에 추출하기 원하는 원소의 위치(index)를 수치로 입력
R에서는 벡터의 첫 번째 원소에 대한 위치는 1부터 시작
두 개 이상의 원소를 추출할 때에는 c(), :, seq(), sequence()
등을 사용
벡터에서 일부의 원소를 추출하는 방법
벡터[index]
5명의 몸무게 (57, 81, 65, 49, 72)를 저장하는 weight라는 변수를 생성
- 수치형 벡터로 된 두 개 이상의 벡터 간에 사칙연산 가능
- R의 강점은 벡터의 연산이 편리하고 빠르다는 점이다.
(for()
등은 속도가 늦어질 수 있다)
연산에 사용되는 벡터들의 원소의 개수가 동일한 경우
벡터들 간의 연산이 될 때에는 각 벡터에 있는 동일한 위치의 값들 간의 연산이 된다.
v1에는 1, 2, 3을 가지고, v2는 4, 5, 6을 갖도록 생성한 후에 연산
v1 = 1:3
v2 = 4:6
v1 + v2
v1 – v2
v1 * v2
v1 / v2
v1 ** v2
두 벡터가 가지는 원소의 개수가 다르더라도 결과적으로 연산이 된다.
벡터 자체는 변하지 않지만 연산과정에서 원소의 개수가 적은 쪽의 벡터는원소 개수가 많은 쪽의 벡터와 동일하게 원소의 개수를 맞춘다.
재사용 규칙(recycling rule)
v1은 3개의 데이터, v2는 6개의 데이터가 있다면 v1과 v2 벡터 간의 연산을 했을 경우 (두 벡터의 개수가 다를 경우)
v1의 데이터는 추가적으로 3개가 더 생성되어 6개가 된다.
새롭게 생성되는 3개의 데이터는 v1이 가지고 있는 값을 순차적으로 새롭게 생성되는 데이터에 지정
재사용 규칙은 R이 가지는 중요한 특징이다.
v1에 1, 2, 3을, v2에는 1, 2, 3, 4, 5, 6을 저장하고 있을 때, 두 벡터 간의 연산
v1은 1, 2, 3을 가지는 벡터이고, v2는 1, 2, 3, 4, 5, 6, 7, 8, 9, 10을 가지는 벡터일 때