> 1:15
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
> 15:1
[1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
연속되는 숫자는 : 연산자를 사용하여 쉽게 만들 수 있다. from : to 의 형태를 사용한다.
> 1.5:15
[1] 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.5 11.5 12.5 13.5 14.5
> 15.2:1
[1] 15.2 14.2 13.2 12.2 11.2 10.2 9.2 8.2 7.2 6.2 5.2 4.2 3.2 2.2
[15] 1.2
이 : 연산자는 처음 시작이 정수인지 아닌지에 따라서 반환되는 데이터 타입이 다르다. 처음 시작이 정수이면 정수가 반환되고, 정수가 아니라면 더블(double)형의 숫자가 생성된다. 어느 경우이든 1만큼 증감된다는 점에서는 같다.
이것을 사용하면 앞에서 설명한 서브세팅에 응용하여 벡터에서 연속된 값을 쉽게 추출할 수 있다.
이것으로 간단한 벡터를 만들어 보자.
> set.seed(0)
> x <- sample(1:50,25,replace = TRUE)
> x
[1] 14 4 39 1 34 23 43 14 18 33 21 21 42 46 10 7 9 15 21 37 41 25 46 37
[25] 37
여기서 set seed(0)에 관련해서는
컴퓨터 프로그램에서 무작위와 관련된 모든 알고리즘은 사실 무작위가 아니라 시작 숫자를 정해 주면 그 다음에는 정해진 알고리즘에 의해 마치 난수처럼 보이는 수열을 생성한다. 다만 출력되는 숫자들 간의 상관관계가 없어 보일 뿐이다.
또한 같은 알고리즘을 여러번 실행하더라도 다른 숫자가 나오도록 시작 숫자는 현재 시간 등을 사용해서 매번 바꿔준다. 이런 시작 숫자를 시드(seed)라고 한다.
따라서 시드를 사람이 수동으로 설정한다면 그 다음에 만들어지는 난수들은 예측할 수 있다.
[출처] [R shiny] 난수 발생 : set.seed와 sample()함수|작성자 혜민스님
sample(x, size, replace = FALSE, prob = NULL)
* x : 배열이면 원래의 데이터, 정수이면 seq(x) 명령으로 데이터 생성
* size : 정수. 샘플 숫자
* replace : 불리언. TRUE 이면 한번 선택한 데이터를 다시 선택 가능
* prob : 배열. 각 데이터가 선택될 수 있는 확률
[출처] [R shiny] 난수 발생 : set.seed와 sample()함수|작성자 혜민스님
R프로그래밍 초보인 저는 간단한 명령어도 모르는 경우가 많아 잘 정리된 블로그에서 정보를 수집해 왔습니다.
여기서 간단하게 바꿔서 실험할 수 있는 것은 replace = FALSE 로 바꾼다면 같은 값이 나오지 않는 걸까 라는 것이다.
> x <- sample(1:50,25,replace = TRUE)
> x
[1] 14 4 39 1 34 23 43 14 18 33 21 21 42 46 10 7 9 15 21 37 41 25 46 37
[25] 37
> x <- sample(1:50,25,replace = FALSE)
> x
[1] 34 42 25 44 15 33 20 35 6 10 38 47 28 39 23 49 48 43 26 7 19 41 45 24
[25] 14
> x <- sample(1:50,25,replace = FALSE)
> x
[1] 2 45 18 22 14 38 1 40 6 23 42 39 11 17 36 13 25 34 41 46 20 7 35 47
[25] 12
> x <- sample(1:50,25,replace = FALSE)
> x
[1] 48 33 45 21 31 38 17 9 39 23 19 26 30 32 29 34 10 1 11 27 42 15 50 24
[25] 35
replace를 TRUE로 한 결과는 21,37의 값이 중복되어 나오지만 FALSE로 변경한 결과는 중복되는 값이 없음을 확인 할 수 있다.
> x[3:10] // (x벡터의 3~10 까지의 인덱스 값 추출)
[1] 45 21 31 38 17 9 39 23
> seq(2,20) // :연산자의 일반적인 형태 기본적으로 seq(from, to)의 형태를 가진다.
[1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> seq(20,2,by = -2) // 증감
[1] 20 18 16 14 12 10 8 6 4 2
> seq(10,1,length.out=7) // 개수
[1] 10.0 8.5 7.0 5.5 4.0 2.5 1.0
> seq(20,2,length.out=10) // 개수
[1] 20 18 16 14 12 10 8 6 4 2
> rep(c(1,2,3),each = 2) // 어떤 벡터를 반복하려면 rep()사용
[1] 1 1 2 2 3 3
> rep(c(1,2,3),time = 2)
[1] 1 2 3 1 2 3
벡터를 만드는 방법은 : , seq , rep 등이 있다.
: 는 가장 기본적인 형태로 1:10 -> 1~10 의 숫자를 나타내준다.(1만큼 증감한다.)
seq()는 증감 ,개수와 같은 조건을 걸 수 있다.
rep()는 하나의 벡터인 반복적인 값을 나타낼 때 주로 사용한다.
'전공 > R프로그래밍' 카테고리의 다른 글
R프로그래밍 9. 데이터 프레임 (0) | 2019.07.01 |
---|---|
R프로그래밍 8. 리스트 (0) | 2019.06.28 |
R프로그래밍 6. 벡터 서브세팅과 교체 (0) | 2019.06.24 |
R 프로그래밍 5. R의 패키지 시스템 (0) | 2019.06.14 |
R 프로그래밍 4. 작업이 이루어지는 공간에 대한 개념. (0) | 2019.06.10 |