본문 바로가기

데이터와 AI/R 기초

[R기초-1] 벡터의 정의와 함수

반응형

 

벡터라고하면 물리에서나 들어봤던 것 같다. R에서 자주 다루게 되는 데이터 구조이다.

벡터, 행렬, 데이터프레임을 가장 많이 사용한다고 한다.

(가장 많이 사용한다는 뜻을 곰곰히 생각해보면, 위에 언급한 것 외에 다른 데이터 구조가 있다는 뜻이다.)

 

그냥 프로그래밍의 배열과 같다고 얘기하고 싶지만, 그건 틀린말이다.

(생김새가 비슷하다고 중국인과 한국인이 같다고 얘기하지 않는다.)

 

그래서 정의를 한번 짚어보고 갈 필요가 있다.

 

간단한 정의는 아래와 같다.

--------------------------------------------------------------------------------------

<벡터의 정의>

   - 하나의 스칼라값, 혹은 하나 이상의 스칼라 원소들을 갖는 단순한 형태의 집합

      ※ 출처 : 데이터 분석 전문가 가이드, 한국데이터산업진흥원

--------------------------------------------------------------------------------------

말이 너무 어려우니, 그냥 '원소들의 집합' 정도로 이해하고 넘어가자.

 

 

1. 벡터의 생성

 

    ex) x <- c(1,2,3); y<-c("a","b","c"); z <- c(TRUE,FALSE,TRUE)

 

    - 벡터는 동일한 타입(숫자, 문자, 논리 등)으로 입력해줘야 한다. 아니면 한가지로 변한다.

    - 참고로 ';'는 한줄에 여러 코드를 입력할 때 구분자의 역할을 한다.(가독성은 떨어지니 사용 주의)

    - 테스트해보니, 문자+숫자→문자, 숫자+논리→숫자로 변했다.

    - 프로그래밍을 배운 사람들은 보통 쌍따옴표("~")안의 내용은 문자열(String)으로 알테지만,

      여기선 문자열이나 문자를 별도로 구분하지 않고 그냥 다 문자라고 한다.

    - 'c()'에서 c의 의미는 concentration(연결) 이라고 한단다.

   

    ex) a <- c(x,y)

 

    - 신기하게도, 위와 같이 작성하면 x와 y에 저장된 데이터가 합쳐서 a에 저장된다

    - 역시나 앞서 말했던 것처럼 x와 y의 데이터 타입이 다른경우 한 쪽으로 자동 형변환된다.

 

2. 연속된 정수 넣기

 

    ex) x <- c(1,2,50:90) 또는 x <- 50:90

 

    - c를 이용해 선언하거나, 간략하게 표현 가능하다.

    - ':' 구문은 50부터 90까지 넣으라는 소리다.

 

3. seq함수

 

    ex) x <- seq(1,101,3) # (시작, 종료, 간격)

 

    - 1부터 101사이의 값을 저장하는데, 1부터 3만큼씩 증가시킨 값을 저장한다는 뜻이다.

    - 101은 종료의 위치일 뿐, 간격에 따라 x에 들어갈수도 안들어갈 수 있으니 유의한다.

    - 참고로 '#'은 R에서 주석처리에 사용된다.

 

4. rep함수

 

   ex) x <- rep(1,times=5)   # (A,times=N) # A를 N번 반복

   ex) x <- rep(1:5, times=3)    # 1:5까지를 3번 반복, 즉 총 15개의 원소가 x에 저장

   ex) x <- rep(c("a","b","c"),each=3) #a,b,c 한 뭉탱이가 3번 반복되어 저장된다.

 

    - A칸에 '1'이라고 썼을때와 '1:5'라고 썻을때의 차이가 있음을 주의한다.

    - 결국 반복하는 건 똑같다. 처음엔 헷갈릴 수 있다.

 

5. names함수

 

   ex) score <- c(90,85,70); names(score) <- c("John","Tom",Jane")

        # 90, 85, 70 각 숫자에 존, 톰, 제인 이름을 붙여준다.

 

    - 실제로는 엑셀로 불러오는 게 많기에 굳이 필요 없을 것 같지만, 지식차원에서 알아둔다.

 

 

6. 원소의 출력

 

   ex) print(x[-2]) # 2번째 원소는 제외하고 출력

   ex) print(x[2]) # 2번째 원소만 출력

   ex) x[1:4]   # 1부터 4까지의 값을 출력

   ex) x[c(1,3,5)]   # 1,3,5 번째 값을 출력! 근데? c를 사용하는군

   ex) x[seq(1,5,2)]   # 1부터 5까지 2씩 증가한 값에 해당하는 원소를 출력. 1,3,5번째 원소값이 출력된다.

   ex) x[seq(5,1,-1)]   # 5부터 1까지 -1씩 증가하면서 값을 출력

   ex) x[-c(3:5)]    # 3~5번째 값을 제외하고 출력

 

   - 예시가 많은 이유는 별의별 활용이 가능하다는 뜻이다. 교수님들이 문제로 약올리기 좋다.

    - print는 콘솔에 출력해주는 역할을 하는 함수이다. 찬조출연했다.

    - '-'는 해당 원소만 제외하라는 뜻이다. 직관적으로 빼(-)라는 뜻으로 이해하면 좋다.

    - 참고로 인덱스는 무조건 1부터 시작한다.(C언어는 0부터 시작해서 전공자는 헷갈릴 수 있다.)

   

 

일단 이정도로 정리하고, 다음 게시글에서 벡터의 연산을 다뤄볼까 한다.

반응형