Remark : R 혹은 기타 프로그래밍 언어에 빨리 익숙해지는 지름길은 모든 코드를 직접 쳐 보는 것. 복사 & 붙여넣기는 당분간 자제
1.2 계산기로서의 R, 명령 실행시키기
콘솔창에 한줄한줄 입력해 보자. 무엇이 출력되는가?
2+2
[1] 4
2+3*3
[1] 11
(2+3)*3
[1] 15
4^2
[1] 16
4^(1/2)
[1] 2
4^(0.5)
[1] 2
exp(-2)
[1] 0.1353353
sqrt(4)
[1] 2
sqrt(-1) # 기본적으로 R은 실수만 가지고 논다.
Warning in sqrt(-1): NaNs produced
[1] NaN
log(1) # log, exp 함수는 모두 밑이 자연상수 e.
[1] 0
log(exp(1))
[1] 1
+(더하기), -(빼기), *(곱하기), /(나누기), ^(지수), exp, log, sqrt 등으로 다양한 계산을 할 수 있다. - 자주 쓰이는 수학 함수로는 abs(), exp(), log(), log10(), sin(), cos(), tan(), asin(), acos(), atan() 등이 있다. 물론 여러 개를 복합하여도 좋다. 예를 들자면,
(굳이 칠 필요 없음)
4^log(log(log(4219711))) / sqrt(54 / 218)
괄호가 없을 경우 연산의 순서는 수학에서의 연산 순서와 같다고 생각하면 된다. 연산의 순서가 헷갈리면 괄호를 적극 활용하라.
연산 순서에서의 우선순위 지정은 무조건 괄호 ()로 해야 한다. 수학 교과서에서 통용되는 다른 괄호기호는 R에서는 다른 용도로 사용된다. 가령, bracket(‘[’)은 인덱스 지정에 사용되며, brace(‘{’)는 코드 묶음을 위하여 사용된다.
열린 괄호는 반드시 닫혀야 정상적인 계산이 가능
R이 명령을 인식하는 단위는 엔터키(newline) 또는 세미콜론(;)이다.
a =4 ; b =3 ; a ; b ;
[1] 4
[1] 3
콘솔 창이 활성화된 상태에서 키보드의 위쪽 방향키(↑)를 눌러 보면 이전에 실행한 명령들을 다시 불러올 수 있다.
’#’은 코멘트 기능을 한다. # 뒤로 입력된 글자는 프로그램에서 인식하지 않는다.
a =10 ; # b = 10 ; abcdefg ABCDEFG e.e.e.e.@(@(@(@(@(# a ; b ;a ; b ;
[1] 10
[1] 3
1.3 변수 지정
R에서 등호(‘=’)는 ’같다’라는 뜻이 아니고 ’우변의 값을 좌변에 대입하라’라는 뜻의 대입 연산자이다.
a =2a # 저장된 변수를 이렇게 볼 수 있다.
[1] 2
A =4A
[1] 4
a # R에 저장되는 변수/함수들은 대소문자를 구분한다.
[1] 2
A + a
[1] 6
B = A + a B^a
[1] 36
a = a + a # 'a + a'를 계산해서 그 값을 기존의 a 자리에 대입하라.a
[1] 4
변수명 지정 규칙
영어 알파벳, 숫자, 언더바(‘_’), 마침표(‘.’)의 조합만 가능 eg) a, X, y_0_estimate, result.value_1
첫 글자는 반드시 문자로. 2M, _result 등은 변수의 이름이 될 수 없다.
프로그램에서 미리 지정한 변수/함수 이름은 사용할 수 없다. pi, log, exp… 등은 쓰지 말 것. PI, LOG, EXP.. 등은 대소문자 구분 규칙상 사용 가능하긴 하나 비권장.
변수에 벡터를 입력해 보자. 다음은 모두 같은 벡터를 입력하는 방법이다.
a =c(1, 2, 3, 4) b =1:4c = (1:4) d =seq(1, 4, 1) a
[1] 1 2 3 4
b
[1] 1 2 3 4
c
[1] 1 2 3 4
d
[1] 1 2 3 4
변수를 거치지 않고 콘솔에 c(1, 2, 3, 4)만 입력할 수도 있다.
다양한 벡터 표현의 조합도 가능
e =c( c(3, 6, 1, 1), a, seq(10, 1, -2), 6, 1 )
만약 벡터 e의 7번째 성분만 따로 빼내고 싶다면?
e[7]
[1] 3
물론 A = e[7] ; 로 e 벡터의 7번째 성분값만 다른 변수로 지정할 수도 있다.
변수에 저장되는 다양한 형태의 자료(벡터, 행렬, 리스트, 데이터 프레임….)를 다루는 법은 세션 3에서 다룬다.
변수에는 수 뿐만 아니라 문자열도 저장할 수 있다. 문자열을 저장할 땐 반드시 쌍따옴표 혹은 단따옴표를 붙인다는 것을 기억하자.
a ='computer' ;a
[1] "computer"
str =c('stat', 'research', 'community') ;str
[1] "stat" "research" "community"
1.4 여러 명령의 편집을 위한 도구 : 스크립트, R Studio
스크립트: 보통 여러 줄의 코드로 이루어진 텍스트 파일. 보통의 코드는 하나의 목표를 위해 여러 명령을 실행하므로, 이들을 한 파일로 관리한다.
RStudio는 R 스크립트의 실행과 관리를 보조하는 통합 개발 환경 (integrated deverlopment environment)이다. RStudio를 이용하면 R을 사용하며 자주 겪는 일들 (여러 변수 다루기, 도움말 보기, 그림 확인 등)을 더 편하게 할 수 있고, 간단한 문법 교정 (괄호가 잘 열고 닫혔는지) 및 syntax highlight도 지원한다.
RStudio에서 여러 줄의 코드 입력한 후 실행하기
File → New → R Script
코드 여러 줄 입력
블록 지정, 혹은 실행시키고 싶은 줄에 커서를 옮기고 마우스 오른쪽 버튼 → [줄 또는 선택영역 실행] (단축키 : Ctrl + Enter 혹은 Shift + Enter)
다음을 스크립트에 입력하고 블록 지정을 이용하여 실행하여 보고 줄별 실행도 해 보라.
작성한 스크립트의 저장은, 해당 스크립트 창이 활성화된 상태에서 메뉴의 [File] - [Save]을 이용하여 저장할 수 있다. ’****.R’의 형식으로 저장하면 된다.
저장한 스크립트는 메뉴의 [File] - [Open]를 통하여 불러올 수 있다. RStudio가 없으면 R 혹은 메모장에서도 불러올 수 있다.
1.5 화면에 문자열 출력
다음을 콘솔에 입력하여 보자.
cat('Hello!')
Hello!
Hello가 화면에 나타나고 바로 뒤에 >가 나타난다. Hello 밑 줄에 >가 뜨게 하고 싶으면?
cat('Hello!') ;
Hello!
cat('Hello!\n') ;
Hello!
cat('Hello!\n\n')
Hello!
cat('He\nllo!\n')
He
llo!
‘’ 은 ‘한 줄을 띄우라’는 뜻의 문자열형 상수이다. ’한 탭만 옆으로 가라’을 뜻하는 캐릭터인’도 있다. 다음을 입력해 보자.
cat('H\tello!\n') ;
H ello!
cat('H\te\tl\tl\to!\n') ;
H e l l o!
변수를 출력에 이용할 수도 있다. 다음을 차례대로 쳐 보자.
i =4 ; j =3 ; string ='i is' ;cat(i)
4
cat(i, j)
4 3
cat('i is', i) ;
i is 4
# 문자열은 언제나 쌍따옴표('')를 붙여야 R이 문자열로 인식한다.cat(string, i)
i is 4
# string에 'i is'가 이미 문자열로 저장되어 있으므로 호출할 때 쌍따옴표 불필요
sprintf() 함수로 출력 포맷에 맞는 문자열을 만들어 출력시킬 수도 있다.
str =sprintf('i is %d, j is %d, string is %s\n', i, j, string)str
[1] "i is 4, j is 3, string is i is\n"
cat(str)
i is 4, j is 3, string is i is
for 구문은 다음 세션에서 다룰 예정이나, 아래를 미리 한번 해보라.
for (i in1:10){cat(sprintf('Currint i is %d\n', i)) }
Currint i is 1
Currint i is 2
Currint i is 3
Currint i is 4
Currint i is 5
Currint i is 6
Currint i is 7
Currint i is 8
Currint i is 9
Currint i is 10
1.6 도움말
R의 모든 기능 및 함수의 사용법을 외우고 있는 사람은 아마 없을 것이다. 다음과 같은 도움말들을 이용할 수 있다.
Html help : help.start() ;
Function help : help(function) ; or ?function ;
help(solve)
?solve
Examples of functions : example(function)
example(solve)
물론 구글링이나 생성AI도 좋은 가이드를 준다. 특히 RDocumentation.org의 문서들은 공식 매뉴얼이다.