R 기초 벡터 (vector) 기초 지식

   R에서 벡터는 여러번 다루었다.  하지만,  벡터(vector)를 모르고서는 R을 이야기 할 수 없다.  데이터 타입이 어떠한지 알아야,  그래프를 그리든,   모델 분석을 하든 어떻게 든 할 수 있다. 

R vector


벡터의 기초지식

 벡터란 다양한 값을 요소로 하는 오브젝트 이다. 다른 프로그램 영역에서는 '배열'에 해당 한다고 생각해도 좋을 것이다.  벡터에 있어서는 첨자를 유연하게 지정 할 수 있고 효율적으로 요소를 추출 할 수 있다.  또 벡터에 들어 있는 요수의 수가 1개뿐인 벡터를 특별히 '스칼라'라고 하기도 한다. 

 예를 들면 아래 실행 예에서 5개의 정수를 요소로 하는 벡터를 초기화하고 있다. 벡터로 부터의 값 추출에는 '배열'을 사용한다.  또 R '배열'은 '1'로 부터 시작 한다.   이와 반대로 파이썬은 배열을 '0' 으로 시작 한다. 

배열은 '[]' 안에 번호(이름이 붙어 있으면 이름도 가능)을 지정 한다.  예를 들면 'x[1]는 'x'라는  첫번째 요소만 꺼낸다 ' x[3:5]'는 'x'라는 벡터의 3번째 부터 5번째 가지의 3개의 요소를 꺼낸다. 

 벡터로부터 여기저기서 요소를 추출하는 경우는 'c' 함수의 배열을 지정해서 추출한다.  벡터로 부터 일부 요소를 제외 하고 추출 하는 것도 가능 하다.  그 경우에는 '-' (마이너스)를 사용한다. 

아래 예제는 벡터에 대한 기초적인 사용 방식이다. 

x <- c(1, 3, 5, 7, 9)

# 2번째 요소
x[2]
## [1] 3
# 3번째 요소부터 5번째 요소
x[3:5]
## [1] 5 7 9
# 3번째와 5번째 요소
x[c(3,5)]
## [1] 5 9
# 2째와 4번째를 제외하고 추출
x[-c(2,4)]
## [1] 1 5 9

🚚 다른 데이터 형식 오브젝트를 벡터로 정리 한다. 

 또 다른 데이터 형식 오브젝트 1개의 벡터로 통합하려면 그중에서 가장 '표현력이 풍부한 형태'로 강제 변환 된다.  아래 표에서 위에 위치하는 데이터 형식 만큼 표현력이 풍부 하다. 

데이터 형식

내역

character

문자형

complex

복소수형

double

실수형

logical

논리형

# 이하는 'double'이 가장 표현력이 풍부
(z1 <- c(1.1, 1, TRUE))
## [1] 1.1 1.0 1.0
typeof(z1)
## [1] "double"
# 이하는 'complex'가 가장 표현력이 풍부 
(z2 <- c(1+1i, 1.1, 1, TRUE))
## [1] 1.0+1i 1.1+0i 1.0+0i 1.0+0i
typeof(z2)
## [1] "complex"
# character가 가장 표현력이 풍부 
(z3 <- c("i", 1+1i, 1.1, 1))
## [1] "i"    "1+1i" "1.1"  "1"
typeof(z3)
## [1] "character"

🚚 벡터 요소에 이름을 붙인다. 
벡터에는 요소마다 이름을 붙일 수 있다.  그 경우는 'names' 함수를 사용한다.  이름은 "배열"로 사용할 수 있다. 


x <- c(1, 3, 5, 7, 9)

# 벡터의 요소에는 이름을 붙일 수 있다. 
names(x) <- c("A", "B", "C", "D", "E")
x
## A B C D E 
## 1 3 5 7 9
# 이름을 배열로 사용할 수 있다. 
x[c("A", "C")]
## A C 
## 1 5

🚚 벡터의 이용

 벡터의 강력한 기능 중 하나가 반복 처리를 생략 할 수 있다는 점이다.  예를 들면 1부터 10 까지의 정수를 요소로 하는 벡터가 있다고 하자.  이 합을 구하는 경우 많은 프로그래밍 언어에서는 요소를 하나씩 추출 해서 더해야 하지만 R에서는 'sum' 함수를 사용해서 한 번에 계산 할 수 있다. 

#클론을 사용하면 연속한 정수를 초기화 할 수 있다. 
x <- 1:10

# 가 요소에 1을 더한다. 
x + 1
##  [1]  2  3  4  5  6  7  8  9 10 11
# 한꺼번에 합계 계산
sum(x)
## [1] 55

 다음으로 논리 연산자인 '>'를 사용한 식에서 각 요소가 5보다 큰지 여부를 판정해 본다. 여기에서 다른 많은 프로그램 언어와는 달리 벡터로 부터 요소를 일일이 꺼내서 개별적으로 비교하는 것을 반복할 필요 없이 한 번에 모든 요소를 비교 할 수 있다는 점에 주목한다. 
 게다가 이 연산식을 그대로 첨자로 사용하여 5보다 큰 요소를 한 번에 정리해서 추출 할 수 있다. 

x <- 1:10

# 5보다 큰가
x > 5
##  [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
# 5보다 큰 요소를 추출
x[x>5]
## [1]  6  7  8  9 10


🚚 벡터를 초기화 한다. 

  벡터를 초기화는 매우 중요하다.   빈 데이터 프레임을 만든 다음에,  for 루프문을 돌려서 데이터를 채워 나간다.  그때, 벡터에서 데이터 유형을 초기화 하면 매우 좋다.  

# 빈 수 오브젝트를 준비한다. 
# 이하는 4분류의 기본 오브젝트를 작성

(xNum <- numeric())
## numeric(0)
(xint <- integer())
## integer(0)
(xDou <- double())
## numeric(0)
(xCom <- complex())
## complex(0)
# 각 유형을 확인 하다. 
typeof(xNum)
## [1] "double"
typeof(xint)
## [1] "integer"
typeof(xDou)
## [1] "double"
typeof(xCom)
## [1] "complex"
# 5개의 0을 요소로 하는 벡터 작성
(x <0- integer(5))
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# 복소수의 경우
# 1 + i이면 i 가 다른 오브젝트로 취급한다. 
(x <- 1+1i)
## [1] 1+1i
# 복수의 값을 한꺼번에 하나의 오브젝트에 대입
(y <- 1:10)
##  [1]  1  2  3  4  5  6  7  8  9 10

반복 함수 (seq, rep) 벡터 

  

반복 함수와 랜덤 벡터를 잘 사용하게 되면, for 루프문을 쓰지 않고 빠르게 계산 할 수 있는 방법이 매우 많다.    

🚚 반복 함수 seq 벡터를 작성 한다.  

아래에는 규칙성 있는 수열을 작성 한다. 

# 1부터 5까지 자연수 수열을 오브젝트 x에 작성
(x <- 1:5)
## [1] 1 2 3 4 5
# 'seq' 함수를 사용한 수열 작성
(x <- seq(from = 1, to =5, by =1))
## [1] 1 2 3 4 5
# 인수 이름은 생략 가능
(x <- seq(1,5,1))
## [1] 1 2 3 4 5
# 인수가 하나일 때는 마지막 항으로 간주된다. 
(x <- seq(5))
## [1] 1 2 3 4 5
# 'along.with' 인수에 지정된 요소와 개수가 일치하는 수열을 반환 한다. 
(x <- seq(10,20, along.with = 1:5))
## [1] 10.0 12.5 15.0 17.5 20.0
# 두 개의 간격을 둔 수열
(x <- seq(1, 10, by =2))
## [1] 1 3 5 7 9
# 공차를 마이너스 지정
(x <- seq(1, -10, -2))
## [1]  1 -1 -3 -5 -7 -9
# 정수 외에도 적용 할 수 있다. 
(y <- seq(0, 1, 0.2))
## [1] 0.0 0.2 0.4 0.6 0.8 1.0

수가 일정한 규칙으로 연속하는 벡터를 작성 하려면  오브젝트 작성 시 ':'으로 초항과 종항을 지정하거나 ' seq' 함수를 사용한다. 
 
 '<-'를 사용해서 오브젝트를 작성 할때 우변에 '1:5'처럼 지정하면 좌변 오브젝트 '1' 부터 '5' 까지 정수 수열이 작성 된다. 


🚚 요소를 반복할 수열  req 벡터를 작성 한다.   

요소를 반복한 수열을 작성 하는 방법을 설명 한다. 

# 오브젝트의 내용을 반복한다.
x <- c(1, 3, 7)
rep(x, 3)
## [1] 1 3 7 1 3 7 1 3 7
# 같지만 R 내부에서의 처리가 효율적
rep.int(x, 3)
## [1] 1 3 7 1 3 7 1 3 7
# 전체의 
rep(x, length =10)
##  [1] 1 3 7 1 3 7 1 3 7 1
 지정된 수를 반복한 벡터를 'rep' 함수로 작성 할 수 있다. 'rep' 함수에는 실행 예에서 사용한 것 외에도 인수를 지정 할 수 있다. 그 중 중요한 인수가 'times'과 'each', 'length.out'이다. 

 'times'  인수는 제 1인수 오브젝트 'x' 전체를 반복하는 횟수를 지정하고, 'each' 인수는 'x'의 각 요소의 반복 횟수를 지정 한다. 'length.out' 인수는 출력 벡터의 길이를 지정 한다. 

rep(1:3, each = 3)
## [1] 1 1 1 2 2 2 3 3 3
rep(1:3, times = 3)
## [1] 1 2 3 1 2 3 1 2 3
rep(1:3, length.out =  10, each = 3)
##  [1] 1 1 1 2 2 2 3 3 3 1
# 1을 5번 ,10을 1번. 후반 인수 c(5.1)가 반복 횟수 지정
rep(c(1,10), c(5,1))
## [1]  1  1  1  1  1 10


위의 내용을 잘 알면  R에서 코드를 아주 간단 하게 짤 수 있다.   


※ 참고서적 : 빅데이터 통계분석을 위한 R 프로그래밍 레퍼런스북 R (교학사)

댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...