barcode

R 배워보기-2. Numbers

Coding/R

파이썬에서는 똑같은 걸 해보려면 모듈을 불러야 하는데 얘는 모듈 X까! 걍 해! 같은 느낌... 

이 다음편 문자열인데 분량 개짧습니다(스포일러) 


난수 만들기

runif(1)
[1] 0.7232427

runif()를 쓰면 0부터 1까지 중 아무 숫자나 하나 출력한다. 

runif(4)
[1] 0.8477728 0.4359127 0.4291748 0.4625472

저 괄호 안에 숫자는 범위가 아니고 개수 지정하는거다. 

runif(5,min=0,max=100)
[1] 87.75978 48.65714 87.73802 18.87537 75.90590

범위는 이런 식으로 지정한다. 

floor(runif(6,min=0,max=7))
[1] 1 4 6 4 4 4

소수점 떼뿌라!!! 

floor는 밑에 설명할건데 그거 보면 왜 저게 6이 아니고 7인지 바로 이해가 된다. 

sample(1:6,6,replace=TRUE)
[1] 1 1 2 1 1 5
sample(1:6,6,replace=FALSE)
[1] 6 4 3 2 5 1

혹시 Replace가 뭐 하는건지 아시는 분 제보 바람. 

 

오오 인생 그것은 정규분포

에서 나는 저기 어디 한 3시그마쯤 있는거같은데? 아니 곡선 벗어나신 거 같은데요

rnorm(4)
[1]  0.8371672  0.1055429 -0.3464783 -1.2293797

정규분포를 따르는 난수를 만들어준다. 처음에 norm 보자마자 노름? 노름공간? 했음... 

선형대수학이 이렇게 위험합니다 여러분. 그동네 벡터는 화살표말고 다른게 또 있다. (화살표 있는건 유클리드 벡터)

rnorm(4,mean=50,sd=10)
[1] 48.48528 48.86100 41.74518 52.02730

평균이 50, 표준편차가 10인 정규분포를 따르는 난수. 평균이 0이고 표준편차가 1이면 표준정규분포다. 

> x=rnorm(400,mean=0,sd=1)
> hist(x)

내가 그렇다고 해짜나여!!! (음?)

아 저거 뭐 깔아야되냐고요? ㄴㄴ 걍 했음 

 

시드

> set.seed(1)
> runif(5)
[1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819

시드를 설정해두면 런이프 5는 계속 저거 뜬다. (저장해둔 시드 날아가면 그대로 안녕...)

> oldseed=.Random.seed
> runif(10)
 [1] 0.2059746 0.1765568 0.6870228 0.3841037 0.7698414 0.4976992 0.7176185
 [8] 0.9919061 0.3800352 0.7774452
# 만든 시드를 저장하거나
> .Random.seed=oldseed
> runif(10)
 [1] 0.2059746 0.1765568 0.6870228 0.3841037 0.7698414 0.4976992 0.7176185
 [8] 0.9919061 0.3800352 0.7774452
# 저장한 시드를 불러오거나

.Random.seed는 시드를 생성해야 생기는데, 이걸 변수에 저장할 수 있다. 

> oldseed=NULL
> runif(10)
 [1] 0.93470523 0.21214252 0.65167377 0.12555510 0.26722067 0.38611409
 [7] 0.01339033 0.38238796 0.86969085 0.34034900

그리고 그걸 Null로 만들면 새로 난수를 만들 수 있다. 

> oldseed=NULL
> if(exists(".Random.seed"))
+ oldseed=.Random.seed
> runif(5)
[1] 0.2059746 0.1765568 0.6870228 0.3841037 0.7698414
# 시드를 공백으로 만들고 새 시드를 지정한 다음 저장한다. 
> if(!is.null(oldseed))
+ .Random.seed=oldseed
> runif(5)
[1] 0.2059746 0.1765568 0.6870228 0.3841037 0.7698414
# oldseed, 그러니까 새로 지정한 시드가 저장된 저 변수가 Null이 아니면 저장해 둔 시드를 불러오라는 얘기.

와 이걸 if로 돌리네. 

참고로 .Random.seed는 지역변수라고 한다. 

 

소수점

거 살다보면 소수점 정도는 올릴 수 있지... 

v
[1] 0.4976992 0.7176185 0.9919061 0.3800352 0.7774452

일단 시범조교 앞으로. 

 

> round(v)
[1] 0 1 1 0 1

Round()

 

> ceiling(v)
[1] 1 1 1 1 1

Ceiling()

 

floor(v)
[1] 0 0 0 0 0

Floor()

 

> trunc(v)
[1] 0 0 0 0 0

Trunc()

 

순서대로 반올림/올림/버림/0 아래로 버림. 

 

round(v,digits=2)
[1] 0.50 0.72 0.99 0.38 0.78
w
[1] 9347052311 2121425213 6516737661 1255550960 2672206687
round(w,digits=-3)
[1] 9347052000 2121425000 6516738000 1255551000 2672207000

구렛나룻... 아니고 자릿수 남길 거 지정할 수 있다. 구렛나룻? 음수로 남기면 자릿수가 10 100 1000 이런 식으로 올라간다. 엑셀에서 써봤으면 아실 듯.

 

round(w/5)*5
[1] 9347052310 2121425215 6516737660 1255550960 2672206685
round(w/7)*7
[1] 9347052309 2121425215 6516737661 1255550961 2672206684
round(w/.02)*.02
[1] 9347052311 2121425213 6516737661 1255550960 2672206687
round(v/.02)*.02
[1] 0.50 0.72 1.00 0.38 0.78
> round(x/.05)*.05
[1] 1.95 0.05 1.90 4.35 1.70

반올림할 자릿수를 n의 배수 형식으로 만들 수도 있다. 

'Coding > R' 카테고리의 다른 글

R 배워보기-5. 데이터 불러오고 쓰기  (0) 2022.08.20
번외편-R로 미적분 하기  (0) 2022.08.20
R 배워보기-4. 공식  (0) 2022.08.20
R 배워보기-3. 문자열  (0) 2022.08.20
R 배워보기-1. Basics  (0) 2022.08.20