R 기초와 출력 읽기
쉽게 말하면
R 은 통계 분석용 프로그래밍 언어예요. 숫자 여러 개를 c( ) 로 묶은 것이 벡터, 엑셀 시트처럼 행과 열이 있는 표가 데이터 프레임이에요. 시험에는 R 코드와 출력이 나오고 '결과가 무엇인가'를 묻는 문제가 많아서, 기본 문법을 직접 쳐 보면 훨씬 쉬워져요.
시험용 정의
R 은 통계 계산과 그래프를 위해 만든 오픈소스 언어다. 값에 이름을 붙일 때는 <- 를 쓴다. 기본 자료구조는 벡터(한 가지 자료형의 1차원 묶음, c( )), 행렬(같은 자료형의 2차원, matrix( )), 배열(3차원 이상), 리스트(서로 다른 자료형·길이를 담는 묶음, list( )), 데이터 프레임(열마다 자료형이 달라도 되는 표, data.frame( ))이다. 인덱스는 1부터 세고, 빈 값은 NA(결측값), 아무것도 없음은 NULL 이다.
비유로 이해하기
벡터는 같은 종류만 담는 달걀판, 데이터 프레임은 열마다 담는 것이 다른 출석부다. 출석부의 이름 열은 글자, 점수 열은 숫자지만 한 열 안에서는 모두 같은 종류다. 달걀판에 귤을 하나 넣으면 모두 '과일'로 다시 분류되듯, 벡터에 글자가 하나 섞이면 숫자도 모두 글자가 된다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 벡터 | 같은 자료형 값을 한 줄로 묶은 것. R 의 가장 기본 단위 |
| 인덱스 | 몇 번째 값인지 가리키는 번호. R 은 1부터 |
| 자료형 | 숫자(numeric), 문자(character), 논리(logical, TRUE·FALSE) 등 |
| 결측값 | 값이 비어 있음. R 에서는 NA |
자료구조 다섯 가지
| 구조 | 차원 | 자료형 | 만드는 함수 |
|---|---|---|---|
| 벡터 | 1차원 | 한 가지 | c( ), seq( ), rep( ) |
| 행렬 | 2차원 | 한 가지 | matrix( ), rbind( ), cbind( ) |
| 배열 | 3차원 이상 | 한 가지 | array( ) |
| 리스트 | 1차원 | 여러 가지 (원소마다 길이도 자유) | list( ) |
| 데이터 프레임 | 2차원 | 열마다 다를 수 있음 | data.frame( ) |
자료형이 섞이면
벡터는 한 가지 자료형만 담으므로 섞어 넣으면 더 넓은 쪽으로 맞춘다. 순서는 문자 > 숫자 > 논리다. c(1, "2", TRUE) 는 모두 문자가 되어 "1" "2" "TRUE", c(1, TRUE, FALSE) 는 숫자가 되어 1 1 0 이다.
자주 나오는 인덱싱
| 식 | 뜻 |
|---|---|
x[2] | 두 번째 값 |
x[-1] | 첫 번째만 빼고 나머지 (음수는 제외) |
x[c(1, 3)] | 1번째와 3번째 |
x[x >= 80] | 조건이 TRUE 인 값만 |
df$score | 데이터 프레임의 score 열 |
df[2, ] | 2행 전체 (쉼표 뒤를 비우면 모든 열) |
df[, "score"] | score 열 전체 (쉼표 앞을 비우면 모든 행) |
df[df$cls == "A", ] | cls 가 A 인 행만 |
벡터 만들기
| 식 | 결과 |
|---|---|
1:5 | 1 2 3 4 5 |
seq(1, 10, by = 3) | 1 4 7 10 |
rep(1:2, times = 3) | 1 2 1 2 1 2 (통째로 반복) |
rep(1:2, each = 2) | 1 1 2 2 (하나씩 반복) |
matrix(1:6, nrow = 2) | 2행 3열, 열부터 채운다. 행부터는 byrow = TRUE |
시험에 이렇게 나와요
- 인덱스는 1부터, x[-1] 은 첫 원소 제외
- 자료형 섞이면 문자 > 숫자 > 논리 로 맞춰짐
- 데이터 프레임: 열마다 자료형이 달라도 됨, 행렬: 하나의 자료형
- matrix 는 기본으로 열부터 채움 (byrow = TRUE 면 행부터)
- NA 가 있으면 mean 결과가 NA, na.rm = TRUE 로 제외
문법 자체보다 다른 개념 문제의 R 출력을 읽을 때 쓰인다
확인 문제
Q1. R 에서 x <- c(10, 20, 30) 일 때 x[1] 의 결과는?
- 오류
- 20
- 10
- 30
정답 보기
3번 10
R 의 인덱스는 1부터 센다. 0부터 세는 파이썬·C 와 다르다. x[1] 은 첫 원소 10이다.
Q2. x <- c(3, 6, 9, 12) 일 때 x[-2] 의 결과는?
- 3 9 12
- 오류
- 3 6 9
- 6
정답 보기
1번 3 9 12
음수 인덱스는 그 자리를 뺀다. 두 번째 6을 뺀 3 9 12.
Q3. c(5, "a", FALSE) 의 자료형은?
- 문자
- 논리
- 리스트
- 숫자
정답 보기
1번 문자
문자가 하나라도 있으면 모두 문자가 된다.
Q4. 열마다 서로 다른 자료형을 담을 수 있는 2차원 자료구조는?
- 데이터 프레임
- 벡터
- 배열
- 행렬
정답 보기
1번 데이터 프레임
행렬·배열·벡터는 한 가지 자료형만 담는다.
Q5. matrix(1:6, nrow = 2) 의 1행은?
- 1 2 3
- 2 4 6
- 1 3 5
- 4 5 6
정답 보기
3번 1 3 5
기본은 열부터 채워서 1열이 1 2, 2열이 3 4, 3열이 5 6. 1행은 1 3 5.
Q6. mean(c(2, NA, 4)) 의 결과는?
- 0
- 3
- 2
- NA
정답 보기
4번 NA
NA 가 섞이면 결과도 NA. na.rm = TRUE 를 주면 3.
Q7. rep(1:3, each = 2) 의 결과는?
- 1 2 3
- 1 2 3 1 2 3
- 1 1 2 2 3 3
- 2 4 6
정답 보기
3번 1 1 2 2 3 3
each 는 원소를 하나씩 반복, times 는 통째로 반복.
헷갈리기 쉬운 O·X
R 의 벡터 인덱스는 0부터 시작한다.
정답 보기
X 1부터 시작한다.
리스트는 서로 다른 자료형과 길이의 원소를 함께 담을 수 있다.
정답 보기
O
c(1, TRUE) 는 문자 벡터가 된다.
정답 보기
X 숫자와 논리가 섞이면 숫자가 되어 1 1 이다.