×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,499,888명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)

1. 난수 생성



난수는 위와 같이 rnorm(값)으로 나타낼 수 있다.


rnorm은 n개의 정규 분포를 하는 난수를 생성해준다.


이때 난수 값은 소수점으로 나타나기에 자신이 원하는 범위로 곱하고 정수 나눗셈을 해주면 원하는 정수 난수를 얻을 수 있게 된다.




난수를 얻는 또다른 방법은 sample 함수이다.


sample(i:j, k) i~j번째 수중 k개를 뽑아라는 의미


이때 sample함수 자체가 벡터를 의미하고 있기에 c(sample(1:99, 9))로 하지 않아도 된다.


만약 정렬된 난수를 받고 싶다면


x <- sort(sample(i:j, k))를 하면 된다.




2. 정렬


length(x)

벡터 x의 길이를 구해준다.


range(x)

x의 범위를 구해준다.


rev(x)

x를 역순으로 정렬해준다. (= reverse)


sort(x)

x를 오름차순으로 정렬해준다.


sort(x, decreasing=TRUE)

x를 내림차순으로 정렬해준다.


order(x)

벡터 x에서 값이 몇번째에 존재해야 순서가 맞는지 알려준다.


예를들어보자.

1,3,4,2가 있다면

1,2,3,4로 정렬되야 하는데


이때 현재 벡터에서 존재하고 있는 각 1,2,3,4의 위치가

1(1),4(2),2(3),3(4)이라는 것이다.


따라서 order(x)를 하면 1 4 2 3이라는 것이다.


order(x, decreasing =TRUE)

마찬가지로 내림차순이 되기 위해

1,3,4,2가 있다면

4,3,2,1로 정렬되야 하니


3(4),2(3),4(2),1(1)이 되야 한다.





3. 인덱싱



파이썬과 동일하게 n:k 인덱싱이 가능하다.


이때 0:5를 하면 0번인덱스부터 5번인덱스까지인데

R에서는 0번 인덱스가 자료형을 나타내고 있다고 말했다.

그래서 예외적으로 0:5라고 하면 그냥 1:5와 동일하게 나타난다.


x[-1]의 의미는 1번 인덱스를 제외하고 출력하라는 뜻이다.

즉, x[-k]의 의미는 k번 인덱스를 제외한 모든 것을 출력하는 뜻이된다.


x[a < x & x < b]의 의미는 a보다 크고 b보다 작은 벡터값을 출력하는 의미이다.






벡터에서는 위와 같이 벡터 생성을 할 수 있다.


x <- i:j를 하면 i~j의 수가 벡터에 대입되고


seq(k)를 하면 1~k까지 수가 대입된다.


seq(from = i, to = j, by = k)를 하면 i~j까지 수가 대입되는데 간격이 k로 되어 대입된다.





4. 벡터 연산



벡터에서 append 기능이 있다.


x <- append(x,y)를 하면 x뒤에 y를 붙이라는 의미가 되고


x <- append(x,y,after=k)를 하면 x 뒤 k번째에 y를 붙이라는 의미가 된다.(끼워넣기)


그리고 벡터끼리 합이 가능한데


x + y를 하면 x의 i번째 인덱스와 y의 i번째 인덱스를 더하게 된다.


이때 x와 y의 벡터 길이가 다르다면 오류가 나타난다.(Warning message)


하지만 더하기 연산은 결국 이루어 지게 된다.


즉, x는 1,2,3이고 y는 3,4이면 x + y는 4,6,3이 되지만 warning이 나타나게 된다.







R에서는 집합으로의 연산도 지원한다.


union(x,y) :: x와 y의 합집합을 나타낸다.

intersect(x,y) :: x와 y의 교집합을 나타낸다.

setdiff(x,y) :: x와 y의 차집합을 나타낸다(집합x - 집합y)

setequal(x,y) :: x와 y가 같은 집합인지 나타낸다.

is.element(k,x) :: k가 집합 x에 존재하는 원소인지 나타낸다.





여기서는 any와 all을 볼 수 있다.


any(논리) :: 벡터에 논리에 해당하는 값이 하나라도 존재하나?

all(논리) :: 벡터에 모든 값이 논리에 해당하나?