Prerequisites
- 예약어(researved words): R에서 의미(sementic)를 미리 정해 놓은 단어
Table 2.1: R 예약어 종류 및 설명
R 예약어
|
설명
|
if, else, while, function, in, next, break
|
조건, 함수, 반복문에 사용
|
TRUE/FALSE
|
논리 상수(logical constants)
|
NULL
|
정의되지 않은 값 혹은 값이 없음 표현
|
Inf
|
무한(infinity)
|
NaN
|
숫자가 아님(not a number)
|
NA
|
결측값(not available)
|
NA_integer_, NA_real_, NA_complex_, NA_character_
|
결측값을 처리하는 상수
|
…
|
함수가 다른 함수에 인자를 전달하도록 지원
|
- 변수(variable): 사용자가 프로그램 처리를 위해 지정한 단어
- 고수준 언어(high-level language): 사람이 읽고 쓰기 쉬운 형태의
명령어를 컴퓨터가 읽고 처리할 수 있도록 고안된 프로그래밍 언어
- 컴퓨터가 이해할 수 있는 언어 \(\rightarrow\) 중앙처리장치(central
processing unit, CPU)가 이해하는 언어 \(\rightarrow\)
기계어(machine language)
- 기계어는 0과 1로 구성된 이진수(binary number)임(예:
0100101001001001001110110101101010110
)
- 고수준 언어의 종류: C, C++, JAVA, 베이직, Perl, Python, R, …
- 번역기(translator): 사람이 이해할 수 있는 표현(언어)를
기계(컴퓨터)가 이해할 수 있는 언어(기계어)로 변환
- 인터프리터(interpreter)
- 컴파일러(compiler)
- 인터프리터: 코드(스크립트) 한 줄을 즉석에서 읽고, 파싱(parsing,
프로그램을 검사하고 프로그램의 문법적 구조를 분석해 컴퓨터가 이해할
수 있도록 번역)하고 해석해 명령을 실행
- R, Python, MATLAB 등은 인터프리터를 번역기로 사용
- Interactive 모드 \(\rightarrow\) R 프롬프트(
>
) 뒤에 한 줄의
명령어를 작성하면 즉시 처리 후 다음 입력을 받을 준비(prompt)를 함.
안녕하세요!!
통계패키지활용 수업에서 R을 배우고 있습니다.
처음이라 실수가 많습니다.
앞으로 잘 부탁해요!!
Error: <text>:1:6: 예기치 않은 '!'입니다
1: 안녕하세요!
^
print("안녕하세요!!")
print("통계패키지활용 수업을 위해 R을 배우고 있습니다.")
print("처음이라 실수가 많습니다.")
print("앞으로 잘 부탁해요!!")
[1] "안녕하세요!!"
[1] "통계패키지활용 수업을 위해 R을 배우고 있습니다."
[1] "처음이라 실수가 많습니다."
[1] "앞으로 잘 부탁해요!!"
- 컴파일러: 완전한 프로그램을 하나의 파일에 담고 파일 안에
저장되어 있는 소스 코드를 기계어로 번역 후 다음 실행할 수 있도록
변환한 기계어를 파일에 담음.
- 보통은
.exe
, .dll
파일 형태로 저장됨
프로그램
- 프로그램(program): 특정 작업(목적)을 수행할 수 있도록 작성한
일련의 R 문장(명령어)의 집합
- 일련의 문장(명령어)들은 텍스트 편집기를 통해 작성하며,
스크립트(script)로 명칭 되는 파일로 저장 \(\rightarrow\) R
스크립트
.R
확장자를 가짐
# Hello.R
print("안녕 R!!") #한국어
print("Hi R!!") # 영어
print("こんにちはR!!") # 일본어
print("Γεια R!!") #그리스어
source("examples/hello.R", encoding = "UTF-8")
[1] "안녕 R!!"
[1] "Hi R!!"
[1] "こんにちはR!!"
[1] "Γεια R!!"
- 예시: 텍스트 파일에서 가장 자주 나오는 단어 찾기 프로그램
require(tidyverse)
require(stringr)
require(ggpubr)
require(ggthemes)
text_dat <- readLines("data/text-example-01.txt")
# 공백 또는 구둣점 문자를 기준으로 텍스트 나누기
# 공백 또는 구둣점 문자 기준으로 텍스트 토큰화
split_wd <- str_split(text_dat, pattern = "\\b|[[:punct:]]")
split_wd <- do.call(c, split_wd)
id <- grepl("[a-zA-Z]+", split_wd) #알파벳을 포함한 단어 인덱스
split_wd <- split_wd[id]
unique_wd <- unique(split_wd) # 중복을 제외한 총 사용 단어
res_v <- vector("integer", length(unique_wd)) # 저장 벡터 생성
for (i in seq_along(unique_wd)) {
for (j in seq_along(split_wd)) {
if (unique_wd[i] == split_wd[j]) {
res_v[i] <- res_v[i] + 1
}
}
}
bind_cols("word" = unique_wd, "freq" = res_v) %>%
arrange(desc(freq))
- 프로그램 작성을 위한 개념적 요소
- 입력(input): 외부로부터 가져온 데이터, 값 등
- 출력(output): 입력에 대한 반응(결과 출력, 파일 저장, 음악
재생, …)
- 순차실행(sequential execution): 스크립트 또는 코드 작성
순서에 따라 한줄씩 실행
- 조건실행(conditional execution): 특정 조건에 따라
문장(명령)을 실행하거나 건너뜀
- 번복실행(iterative execution): 특정 명령을 반복적으로 실행
- 재사용(resuse): 스크립트의 집합(다수 줄로 구성된 코드 또는
스크립트)에 이름을 부여하고 저장 \(\rightarrow\) 사용자 지정
함수(function)
- 프로그램 오류의 종류
- 구문오류(syntax error): R 언어가 이해할 수 없는 문장 또는
문법으로 실행했을 때 나타나는 오류 \(\rightarrow\) 가장 고치기
쉽고 즉각적으로 알려줌
- 논리 또는 run-time 오류(logic or run-time error): 구문은
완벽하지만 실행 순서 또는 논리적으로 연관방식에 문제가 있어서
명령어를 수행할 수 없는 경우
- 의미론적 오류(sementic error): 프로그램은 구문적으로 오류가
없고 실행되지만 올바른 결과를 출력하지 않는 경우 \(\rightarrow\)
제일 고치기 어려움
- 가장 간단한 프로그래밍은 순차적으로 명령을 실행하되 입력 시 흐름을
잠시 중단하고 대기하는 방법 \(\rightarrow\) 프롬프트 상 명령어 한 줄씩
입력
# 아주 간단한 프로그래밍 예제
# readline() 함수 이용해 R한테 인사 받기
name <- readline("What's your name?: ")
cat("Hello, ", name, "!\n", sep = "")
# readline() 함수를 이용해 알바비 계산
x <- as.numeric(readline(prompt = "하루 아르바이트 시간을 입력하시오: "))
y <- as.numeric(readline(prompt = "시급을 입력하시오 (단위=원): "))
z <- as.numeric(readline(prompt = "한달 동안 총 몇 일 동안 일을 하셨나요? "))
cat("월 급여는 ", x * y * z, " 원 입니다.\n", sep = "")