1  R - 기초 연산

Acknowledgement: 본 절의 구성에는 다음 교재를 발췌하였다.

1.1 R 소개

  • 통계적 계산에 특화된 컴퓨팅 언어

  • 장점

    • 무료, 오픈소스
    • 데이터 전처리 (특정 요소 검색과 필터링), 수학적 계산 및 그림그리기가 쉽고 빠름
    • 웬만한 작업에서 구글링으로 도움 받을 수 있음 (R 관련 온오프라인 커뮤니티가 활성화되어 있음, 학계 및 일부 산업계에서 활용중)
  • 단점

    • vs. SPSS / Stat / SAS : 프로그래밍 지식 필요 (진입장벽 있음), 무보증 (오픈소스이므로)
    • vs. Python : 프로그래밍적 체계가 다소 부족 (완벽한 자동화와 대형화에는 불리)
    • R 설치(Windows 기준) : https://cran.r-project.org → ‘Download R for Windows’→ base → ‘Download R 4.X.X for Windows’ *** 설치 언어 선택시 영어 권장 (오류메시지 구글링 용이) ***
    • RStudio 설치(Windows 기준) : https://www.rstudio.com → ‘Download’ → ‘Download RStudio Desktop’ → Windows 11/10/8/7
    • Google Colab을 이용하여 클라우드 환경에서의 R 실습도 가능하다: https://colab.research.google.com/notebook#create=true&language=r으로 이동하여 노트북을 생성하면, 메뉴의 ’런타임 유형 변경’을 눌렀을 때 R 런타임이 추가된 것을 확인할 수 있다.
  • 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 = 2 
a                   # 저장된 변수를 이렇게 볼 수 있다.
[1] 2
A = 4 
A 
[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
  • 변수명 지정 규칙
    1. 영어 알파벳, 숫자, 언더바(‘_’), 마침표(‘.’)의 조합만 가능 eg) a, X, y_0_estimate, result.value_1
    2. 첫 글자는 반드시 문자로. 2M, _result 등은 변수의 이름이 될 수 없다.
    3. 프로그램에서 미리 지정한 변수/함수 이름은 사용할 수 없다. pi, log, exp… 등은 쓰지 말 것. PI, LOG, EXP.. 등은 대소문자 구분 규칙상 사용 가능하긴 하나 비권장.
  • 변수에 벡터를 입력해 보자. 다음은 모두 같은 벡터를 입력하는 방법이다.
a = c(1, 2, 3, 4) 
b = 1:4 
c = (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 in 1: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의 문서들은 공식 매뉴얼이다.