R: 기초

계산기로 사용하기


R을 시작하면 >라는 표시가 뜬다. 이 표시를 프롬프트(prompt)라고 한다. 프롬프트는 R이 사용자의 입력을 기다린다는 표시이다. 간단한 명령을 몇 가지 내려보자.

> 1+1
[1] 2
> 3-2
[1] 1
> 4*3
[1] 12
> 5/2
[1] 2.5
> 3^2
[1] 9

결과를 보면 알 수 있겠지만 +는 덧셈, -는 뻴셈, *는 곱셈, /는 나눗셈이며 ^은 거듭제곱을 뜻한다. 계산 순서는 수학과 마찬가지로 괄호친 부분, 거듭제곱, 곱셈과 나눗셈, 덧셈과 뺄셈 순서로 왼쪽부터 계산한다.

> 1+3*2^2
[1] 13
> 1+(3*2)^2
[1] 37

주석

# 표시가 붙으면 이하의 내용은 주석으로서 무시한다.

> 1 + 1 # 1과 1을 더한다
[1] 2

변수

R은 변수에 값을 할당(assign)할 수 있다. 아래에서 x, y 등이 변수이다. 변수 이름은 알파벳과 숫자, 그리고 밑줄(_)과 마침표(.)로 지을 수 있으나 첫 글자는 알파벳으로 시작해야 한다.

> x = 1
> y = 2
> x + y
[1] 3

함수

사칙연산 외의 다른 계산들은 함수를 이용한다. 예를 들어 양의 제곱근을 구하려면 sqrt 함수를 쓴다.

> sqrt(2)
[1] 1.414214

그 외에도 자주 쓰이는 함수로 abs, exp, log가 있다. abs는 절대값, exp는 e^x, log는 로그값을 구한다.

> abs(-3)
[1] 3
> exp(1)
[1] 2.718282
> log(2)
[1] 0.6931472

함수에는 기본값으로 설정된 부분들이 있다. 예를 들어 log 함수의 밑은 e가 기본값이다. 다시 말해 자연로그를 구한다. 만약 log32를 구하고 싶다면 다음과 같이 밑을 지정해준다.

> log(2, base=3)
[1] 0.6309298

도움말

"?함수이름"과 같은 형식으로 입력하면 함수에 대한 도움말 창이 뜬다. R의 도움말은 매우 자세하고 대부분 예제를 제공하기 때문에 도움말을 읽어보고 예제를 따라해보면 특별한 교재없이 도 많은 공부가 된다.

> ?log

만약 함수 이름 자체를 모를 때는 help.search 함수를 이용해 도움말을 검색한다.

> help.search("logarithm")

벡터

R은 통계용 언어이므로 하나의 값을 다루는 경우보다 여러 개의 값을 한 번에 다뤄야하는 경우가 더 많다. 여러 개의 값을 나타내는 방법에는 벡터, 리스트, 매트릭스, 데이터프레임 등 다양한 방법이 있다. 가장 기본은 벡터로서 한정된 개수의 값을 표현한다. 벡터는 c 함수를 이용해 만든다.

> c(1,2,3)
[1] 1 2 3
> c(1,2,3,4,5)
[1] 1 2 3 4 5

하나의 값과 벡터를 사칙연산을 하면 그 값을 벡터의 각 값에 반복해서 연산을 한다.

> 1 + c(1,2,3)
[1] 2 3 4

벡터끼리 사칙연산을 하면 두 벡터에서 같은 위치에 있는 값끼리 연산을 한다.

> c(1,2,3) + c(4,5,6)
[1] 5 7 9

두 벡터의 길이가 다르면 짧은 쪽을 처음부터 다시 적용한다. 아래 첫 번째 예의 경우 1+3, 1+4를 하고 5와 6에는 다시 1과 2를 적용해서 계산을 한다. 긴 벡터의 길이가 짧은 벡터의 길이의 배수인 것이 원칙이지만 그렇지 않더라도 경고(warning)만 뜰 뿐 계산은 된다.

> c(1,2) + c(3,4,5,6)
[1] 4 6 6 8
> c(1,2,3) + c(4,5,6,7)
[1] 5 7 9 8
Warning message:
긴 오브젝트의 길이는
짧은 오브젝트의 길이의 배수가 되지않습니다 in: c(1, 2, 3) + c(4, 5, 6, 7) 

1,2,3,4..와 같이 순서대로 이어지는 정수열은 "시작:끝"과 같은 형태로 콜론(:)을 이용해서 나타낼 수도 있다.

> 1:5
[1] 1 2 3 4 5
> 3:9
[1] 3 4 5 6 7 8 9

콜론 대신 seq 함수를 사용할 수 있다. seq(끝), seq(시작,끝), seq(시작, 끝, 간격)과 같은 형태로 사용한다.

> seq(10)
 [1]  1  2  3  4  5  6  7  8  9 10
> seq(3,7)
[1] 3 4 5 6 7
> seq(0,1,0.1)
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> seq(10,1)
 [1] 10  9  8  7  6  5  4  3  2  1

같은 수가 반복되는 벡터를 만들 때는 rep 함수를 사용한다. rep(값, 회수)라고 하면 값을 회수만큼 반복한다. rep(벡터, 회수)라고 하면 벡터를 회수만큼 반복한다. rep(벡터, 벡터)라고 하면 왼쪽 벡터에 있는 값을 오른쪽 벡터에 있는 같은 자리의 회수만큼 반복한다. length 옵션을 주면 반복해서 해당 길이만큼 되도록 한다.

> rep(1,5)
[1] 1 1 1 1 1
> rep(1:3, 3)
[1] 1 2 3 1 2 3 1 2 3
> rep(1:3, 1:3)
[1] 1 2 2 3 3 3
> rep(1:3, length=10)
 [1] 1 2 3 1 2 3 1 2 3 1

당연히 벡터도 변수에 할당할 수 있다.

> v = c(1,2,3)

하나의 값에 적용하는 함수를 벡터에 적용하면 사칙 연산의 경우와 마찬가지로 각각의 값에 적용한다.

> log(v)
[1] 0.0000000 0.6931472 1.0986123

벡터에 적용해야 하는 함수도 있다. 아래 mean은 평균을 구하는 함수이다.

> mean(v)
[1] 2

벡터에서 위치로 한 값을 지정하고 싶으면 "변수이름[위치]"와 같은 표현을 사용한다. 만약 위치가 벡터의 길이를 초과하면 "값 없음(not available)"을 뜻하는 NA 표시가 뜬다.

> w = 3:5
> w
[1] 3 4 5
> w[1]
[1] 3
> w[2]
[1] 4
> w[4]
[1] NA

논리 연산

R에서 가장 많이 사용하는 값은 수치형(numerical)이지만 논리형(logical)과 문자형(character)도 있다.

논리형은 참, 거짓을 나타내는 값으로 T 또는 TRUE는 참, F 또는 FALSE는 거짓을 나타낸다. 등식이나 부등식의 결과는 논리값이다. 등식에서 '같다'의 의미로 쓰이는 기호가 ==임에 유의하라. =은 변수에 할당할 때 쓴다.

> 1 == 2 # 1과 2가 같다
[1] FALSE
> 1 != 2 # 1과 2가 다르다
[1] TRUE
> 3 > 4 # 3이 4보다 크다
[1] FALSE
> 3 >= 4 # 3이 4보다 크거나 같다
[1] FALSE
> 3 < 4 # 3이 4보다 작다
[1] TRUE
> 3 <= 4 # 3이 4보다 작거나 같다
[1] TRUE

논리값은 부정(negation), 논리곱(AND), 논리합(OR) 그리고 배타적 논리합(Exclusive OR)을 할 수 있다. 부정은 !, 논리곱은 &, 논리합은 |, 그리고 배타적 논리합은 xor 함수를 사용한다.

부정

> !T
[1] FALSE
> !F
[1] TRUE

논리곱

> T & T
[1] TRUE
> T & F
[1] FALSE
> F & T
[1] FALSE
> F & F
[1] FALSE

논리합

> T | T
[1] TRUE
> T | F
[1] TRUE
> F | T
[1] TRUE
> F | F
[1] FALSE

배타적 논리합

> xor(T,T)
[1] FALSE
> xor(T,F)
[1] TRUE
> xor(F,T)
[1] TRUE
> xor(F,F)
[1] FALSE

문자형

문자형 값은 따옴표로 둘러쳐서 나타낸다.

> "hello"
[1] "hello"

문자형에 관한 기본 함수는 ?character로 검색해서 보라.