티스토리 뷰

1. Vector란

: sequence of data element of the same basic time

그냥 array랑 동일하다고 생각하면 된다.

vector의 이름은 linear algebra(선형 대수학)에서 왔다. R은 statistical language이기 때문에.

 

하지만 다른 언어의 array와 다른 점은, 하나의 vector에 들어가는 element의 type은 모두 같아야 한다.

따라서 Character가 들어간 vector에 number를 넣어도 character값으로 저장한다.

 

또한, element의 index가 일반적으로 0부터 시작되는 반면 1부터 시작된다.

이때까지 사용한 하나의 변수 또한 element가 하나인 vector이다.(length가 1인 vector)

 

2. Vector에 접근하는 방법

위에서 언급한 index로 다른 일반적인 언어와 마찬가지로 [ ] (square brackets)로 접근 가능하다.

다만 R에서의 특이한 점은, vector w에서 제외하고 싶은 index를 w[-3] (3번째 index를 제외한 모든 element)와 같이 사용할 수 있는 것이다.

또한 [ ]안에 다른 벡터를 넣을 수도 있다. 예를들어 2:4과 같은 벡터를 넣으면 (w[2:4]) w의 2번째부터 4번째 element가 출력된다. - 와 vector를 혼합해서 사용 가능.

 

※ square bracket [] 가 R에서 그닥 중요하지 않은 이유 :

R이 vectorized programming language이기 때문에 모든 계산은 element 하나하나 하지 않고 vector 단위로 통으로 한다.

 

3. vector 연산

1) 크기가 동일한 경우의 연산

위와 같이 두 vector가 있을때 사칙 연산을 비롯한 > < 등의 연산을 크기가 같은 벡터에서의 경우 같은 위치의 element마다 계산해 새로운 vector를 return할 수 있다.

boolean operation 또한 vectoized 방식으로 저장이 된다.

 

2) 크기가 다른 경우 

 그럼 크기가 동일한 경우 말고 length가 서로 다른 vector같은 경우 어떻게 연산을 할까?

여기서 Recycling의 개념이 나타난다.

위와같이 하나의 vector의 크기는 5이고 다른 하나의 크기는 10인 vector가 있을때, 연산은

위와 같이 크기가 5인 벡터가 한번 더 recycle되어 결과값이 산출된다.

하지만 크기의 값이 배수가 아닌 경우는 어떻게 될까

위와 같이 크기가 5가 아닌 6으로 배수가 아닐 때, 

recycling이 여전히 일어나지만 경고 문구가 뜬다. 

loop을 만들어서 매 iteration마다 주 요소를 더하는 것이 다른 언어에서 일반적인 devectorized approach이지만 R에서는 vector간의 연산이 가능하다.

심지어 function 또한 vector를 사용할 수 있다. function의 argument로서 vector를 사용할 수 있고, function의 결과값으로 vector의 값을 return할 수 있기에 활용시 매우 편리하다.

 

4. vector를 만드는 방법

(1) c() 함수 사용

 - c 함수를 이용하여 element를 vector에 추가 하여 생성 할 수 있다.

* 예시)

MyFirstVector <- c(3, 45, 56, 732)
MyFirstVector
is.numeric(MyFirstVector)
is.integer(MyFirstVector)
is.double(MyFirstVector)
is.character(MyFirstVector)

 - default로 double을 저장하기 때문에 integer가 아니다.

is.numeric(), is.integer(), is.double()등의 함수를 사용해서 vector의  type에 대한 값을 boolean 값으로 받을 수 있다.

 - vector에는 같은 type만 들어갈 수 있기 때문에 element에 문자가 포함되어 있으면 character 값이 된다. (L이 붙어야 integer)

 

(2) seq()함수 사용

 - sequence로 어떠한 숫자에서 어떠한 숫자 까지 값을 생성할 수 있다. : 를 통한 예를들어 1:15와 seq(1,15)는 같은 결과값이 나온다. 하지만 이것을 사용하는 이유는 argument를 추가하여 step을 줄 수 있다. 예를들어 seq(1,15,4)를 입력하면 1 5 9 13의 값이 도출된다.

 

(3) rep()함수 사용

rep(x,y) 형태로 사용하며 vector x의 element를 y번 반복해준다. (replicate)

 

5. Vectorized operation의 power

x <- rnorm(5)
# R-specific programming loop
x
for (i in x) {
  print(i)
}

# conventional programming loop
# R에서는 잘 사용하지 않는 방법
for(j in 1:5){
  print(x[j])
}

위 x에 정규분포의 랜덤 숫자 5개를 만들어 vector를 형성한 다음, 2가지 approach가 있다.

첫째는 R-specific programming loop인데, R에서의 vector활용 특수한 방식으로 x의 element를 출력한다.

두번째 approach는 conventional한 방법인데, 다른 프로그래밍 언어처럼 5번을 돌면서 index를 특정 vector안에 넣음으로서 element를 출력하는 방법이다.

이와 비슷하게,

N <- 100
a <- rnorm(N)
b <- rnorm(N)

# vectorized apprach
c <- a * b

# De-vectorized approach
d <- rep(NA,N)
for (i in i:N) {
  d[i] <- a[i] * b[i]
}

위와 같이 두 vector를 곱하는 연산에 있어서, r-specific한 방법과 de-vectorized 방법 두가지로 vector의 곱셈을 진행할 수 있다. 그럼 이 두 방법중 어느것이 더 빠를까?

답은 둘중 vectorized approach가 더 간결하고 더 빠르다. 이는 N의 크기를 키워 실행하면 확인할 수 있다.

de-vectorized approah가 더 느린 이유는, R은 high-level language로서 계산이나 function 을 다룰때 C나 fortan code에 delegate를 해서 수행을 하는데, vectorized approach같은 경우 vectorized approach는 variable 종류를 한번만 넘겨 주면 되는 반면, de-vectorized approach같은 경우 코드 위임시 a, b, d 종류 모두 variable 종류를 넘겨줘야 하고 d에 결과값을 할당까지 해야 하므로 더 느린것이다. (vector에는 한가지 종류의 variable 밖에 들어가지 못하기 때문에)

 

6. R에서의 Function

(1) function이란

강의에서 function을 blender, 즉 믹서기라고 생각하면 된다고 했다. input이 필요하고, blender처럼 internal things를 추가 해서 output으로 여러가지 무언가를 만들어 낼 수 있다. 


(2) help page

유닉스의 man page같은 형태로, function 앞에 ?를 붙혀 실행하면 function에 대한 help page가 나온다.

여러 함수들을 ?을 통해 확인해보면, rnorm()같은 경우, mean(평균)과 sd(standard deviation, 표준편차)를 지정할 수 있다.

rnorm(n=5, sd=8, mean=100)

또한, 위와같이 parameter의 이름을 적어 줄 수도 있고, 이로 인해 parameter 입력 순서를 변경할 수도 있다.

seq(또한 along.with와 length.out parameter로 from과 to의 값을 몇등분할지에 대한 값을 설정할 수 있는데, 차이점은 length.out같은 경우 몇등분 할지에 대한 값을 숫자로 지정하는 것이고, along.with같은 경우 vector를 argument로 vector의 크기를 넘겨 주는 것이다.), rep등의 help page를 확인하여 사용할 수 있다.

 

7. R에서의 package

(1) package란 

위에서 function을 blender라 했다. package는 blender와 거기에 넣을 input이 용도에 맞게 담겨 있는것이라고 보면 된다. 이용가능한 functionality를 확장시켜 준다

 

(2) library와 package의 차이점

packages are collection of R functions, data and compiled cod in a well-defined format.

The directory where package are stored is called the library,
 - Source : https://www.statmethods.net/
library는 package가 저장되어 있는 폴더라고 보면 된다. package가 저장되어 있는곳, 그곳이 library이다.

 

(3) 사용법
좌측 하단 packages를 누르면 이용가능한 package들을 볼 수 있고,  checked 된것은 이 session에서 돌아가는것을 말한다.

install.packages("ggplot2")

library(ggplot2)

위와같이 install.packages("패키지이름")을 통해 다운 가능하며, 좌측 하단 +를 클릭하면 다음과 같은 창이 뜨는데,

CRAN은  https://cran.r-project.org/  comprehensive R Archive Networks의 약자이며 R은 open source programming language이므로 user가 package에 contribute하면 다운할수 있다.

 

The Comprehensive R Archive Network

 

cran.r-project.org

install.packages() function을 통해서 다운했다면, library() function을 통해서 package를 activate시켜 줘야 한다.

그야 package안의 function들을 사용할 수 있다.

 

출처 : https://www.udemy.com/course/r-programming/

'Programming > R programming' 카테고리의 다른 글

R programming (3) - Matrices  (0) 2021.07.20
R programming (1) - Core principles  (0) 2021.07.08
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday