해당 포스트는 R의 랜덤 추출 함수인 sample 및 prob 옵션에 대해 설명합니다.
INTRO
R에서 랜덤 추출을 담당하는 기본 함수에는 sample()
이 있습니다. 난수 생성, 복원/비복원 추출 등의 실험에서 사용되는 함수로 prob=
옵션으로 추출 대상 각각에 추출 확률을 지정할 수 있습니다. 아래에서는 네이버 지식인을 통해 받은 질문에 대한 답변과 sample()
함수의 사용법을 함께 설명합니다.
문제 풀이
1. sample()
함수 설명
sample()
함수는 데이터를 랜덤 추출할 때 사용하는 함수이며, 기본적인 사용법은 아래와 같습니다.
sample(x, size, replace = FALSE, prob = NULL)
x
: 랜덤 추출 대상이 되는 데이터size
: 랜덤 추출할 개수replace
: 복원 추출 여부 (기본값은 FALSE)prob
: 랜덤 추출 확률 지정
2. 코드 설명
위 질문에서 받은 코드를 한 줄로 변경하면 아래와 같으며, 해당 코드를 읽어본다면 아래와 같습니다.
sample(x = 1:10, size = 5, replace=T, prob=c(rep(0.01,9), 0.91)
x = 1:10
: 1부터 10까지의 숫자들을 랜덤 추출하는데size = 5
: 5개의 숫자를 추출하며replace = T
: 추출 방법은 복원 추출을 이용한다prob = c(rep(0.01, 9), 0.91
: 추출 대상의 각 추출 확률은 0.01, 0.01, ..., 0.91로 지정한다
위 설명에서 다른 부분은 이해가 잘 되시겠지만 마지막 prob = c(rep(0.01, 9), 0.91
옵션이 헷갈릴 수 있습니다. prob
옵션의 입력을 실행 단계로 구분해 보면 아래와 같습니다.
rep(0.01, 9)
: 0.01을 9번 반복해라 -> (0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01)c(rep(0.01, 9), 0.91)
: 1번에 0.91 값을 추가해라 -> (0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.91)
prob
옵션을 적용하여 코드를 다시 읽어본다면,
- 복원 추출 방법으로
- 5개의 숫자를 추출하는데
- 대상 데이터 및 추출 확률은 아래와 같다.
1 = 0.01 2 = 0.01 3 = 0.01 4 = 0.01 5 = 0.01 6 = 0.01 7 = 0.01 8 = 0.01 9 = 0.01 10 = 0.91
3. 테스트
위에서 설명한대로 질문 받은 코드는
참고로 set.seed
를 지정하지 않았기에 결과값은 실행하시는 분마다 다르게 나타납니다.
sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 8 10
sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 10 8
sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 10 10
sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 10 10
sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 10 10
마무리
이번 포스트에서는 R에서 랜덤 추출을 담당하는 sample()
함수에 대해 소개하였습니다. 간단하지만 유용한 함수로 통계, 시뮬레이션, 머신러닝 데이터 분할 등에 활용되며, 주사위 게임, 카드 뽑기, 사다리 타기, 로또 시뮬레이션 등 퀴즈에서 많이 출제되는 편입니다. 사용법을 잘 익혀두시고 많은 곳에 활용하시면 좋겠습니다.
관련 링크
[1] 네이버 지식인
[2] [R] 데이터 샘플링 (Data Sampling)
[3] [R] 정수 리스트에서 첫번째 짝수 전까지 홀수 정수 출력하기
[4] [R] R에서 반응 변수 비율에 맞춰 데이터셋 분할하기 (15회 ADP 실기 기출)