Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[R] Data type Computer & Program

역시 어제 MySQL InnoDB vs MyISAM과 함께 받은 질문..
감만 잡고 있으면 말로 표현하도록 정리가 안 된다. TㅅT

numeric, character와 같은 primitive type도 있지만, 많이 사용되는 유용한 data type이 있다. 구분해 보자..



vector
R primitive type 을 담는 ordered list (index는 1 부터 시작)
같은 타입의 element만을 담을 수 있다는 제약이 있다.
c() 함수를 사용해서 생성
배열처럼 생각하면 편하다.
> # numeric 타입
> c(1, 2, 3)
[1] 1 2 3
> # character 타입
> c('a', 'b', 'c')
[1] "a" "b" "c"
> # 여러 타입이 섞이는 경우는 변환 가능한 타입으로 변경된다.
> # 1, 2가 numeric에서 chracter로 변경
> c(1, 2, 'a', 'b')
[1] "1" "2" "a" "b"


factor
vector와 비슷하다.
Java의 enum처럼 이름만 있는 nominal이다. (level로 값을 구분)
(내부적으로는 1, 2, 3 처럼 숫자로 처리해서 메모리 등을 아끼려는 의도인듯)
factor() 함수를 통해서 factor로 변경 가능
> order <- data.frame(Size=c('large', 'medium', 'small', 'small', 'medium'),
         Colour=c('red', 'blue', 'yellow', 'red', 'red’))
> # 위와 아래는 동일한 결과
> order <- data.frame(Size=factor(c('large', 'medium', 'small', 'small', 'medium’)),
         Colour=factor(c('red', 'blue', 'yellow', 'red', 'red’)))
> order
Size Colour
1 large red
2 medium blue
3 small yellow
4 small red
5 medium red

> # Size와 Colour는 모두 factor로 생성된다.
> class(order$Size)
[1] "factor"
> # factor가 가지는 값(level)의 전체 종류를 확인할 수 있다.
> levels(order$Size)
[1] "large" "medium" "small"
> order$Size
[1] large medium small small medium
Levels: large medium small
> summary(order$Size)
large medium small
1 2 2


matrix
2차원 행렬 (3차원 이상의 다차원 행렬은 array를 사용한다)
matrix() 함수를 사용한다.
> # 1 ~ 20의 숫자를 5행 4열에 채운다.
> matrix(1:20, nrow=5,ncol=4)
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> # 행렬을 채울 때 행 방향으로 채운다.
> matrix(1:20, nrow=5, ncol=4, byrow=TRUE)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20


array
matrix처럼 행렬을 나타낸다.
array() 함수를 사용하며, 3차원 이상의 행렬을 표현할 수 있다.
> # matrix 예제와 똑같은 5행 4열 행렬
> array(1:20, dim=c(5, 4))
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> # class()로 확인해봐도 matrix로 생성된다.
> class(array(1:20, dim=c(5, 4)))
[1] "matrix"

> # 3차원 행렬, dim으로 각 차원 마다 길이를 지정해 주면 된다.
> array(1:20, dim=c(2, 5, 2))
, , 1

[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10

, , 2

[,1] [,2] [,3] [,4] [,5]
[1,] 11 13 15 17 19
[2,] 12 14 16 18 20

> class(array(1:20, dim=c(2, 5, 2)))
[1] "array"
> array(1:20, dim=c(2, 5, 2))[,,2]
[,1] [,2] [,3] [,4] [,5]
[1,] 11 13 15 17 19
[2,] 12 14 16 18 20
> # 2차원 행렬을 꺼내면 matrix다.
> class(array(1:20, dim=c(2, 5, 2))[,,2])
[1] "matrix"


list
vector와 비슷하다. (단, element가 모두 같은 타입일 필요는 없다.)
ordered list (역시 index는 1 부터 시작)
element로 vector 등이 들어가는 경우 matrix나 array와는 달리 row 길이가 서로 달라도 상관없다.
list() 함수를 사용한다.

> n <- c(2, 3, 5)
> s <- c("aa", "bb", "cc", "dd", "ee")
> b <- c(TRUE, FALSE, TRUE, FALSE, FALSE)
> x <- list(n, s, b, 3)
> x
[[1]]
[1] 2 3 5

[[2]]
[1] "aa" "bb" "cc" "dd"

[[3]]
[1] TRUE FALSE TRUE

[[4]]
[1] 3
> # 이름을 지정해 줄 수 있다.
> y <- list(Numeric=n, Character=s, Boolean=b, 3)
> y
$Numeric
[1] 2 3 5

$Character
[1] "aa" "bb" "cc" "dd"

$Boolean
[1] TRUE FALSE TRUE

[[4]]
[1] 3

> # element를 참조하려면 [[]]를 사용하거나 이름으로 접근한다.
> x[[1]]
[1] 2 3 5
> y$Numeric
[1] 2 3 5
> class(x[[1]])
[1] "numeric"
> # []를 사용하면 list 객체가 나옴
> class(x[1])
[1] "list"


data frame
matrix 보다 유연하게 여러 타입의 element를 가질 수 있다.
list와는 달리 row 개수가 동일해야 한다.
data.frame() 함수를 사용한다.
열 마다 이름을 지정해 줄 수 있다.
> # list 예제에서 사용했던 n, s, b로 만들면 row 개수가 달라서 error
> data.frame(n, s, b)
Error in data.frame(n, s, b) :
arguments imply differing number of rows: 3, 4
> # row 수를 맞추면 생성된다.
> newS <- c('a', 'b', 'c')
> data.frame(Numeric=n, Character=newS, Boolean=b)
Numeric Character Boolean
1 2 a TRUE
2 3 b FALSE
3 5 c TRUE



- 참고
Quick-R: Data Types
R Introduction | R Tutorial
R Tutorial: The Basic Data Types
R Programming/Data types - Wikibooks

핑백

  • Sigel's house made of ice 。。。 : [MySQL] MyISAM과 InnoDB 차이 2013-10-24 08:38:35 #

    ... 난 이런 갑작스러운거에는 잼병 TㅅT 오늘도 까먹기 전에 정리.. MySQL의 InnoDB와 MyISAM 엔진의 차이는?? 간단히 정리.. (그리고 함께 받은 R data type 질문) 우선 한줄로 요약하면.. 필요에 따라 골라쓰자~ (근데 나는 transaction 때문에 아마 InnoDB가 주가 되지 않을까??) InnoDB ... more

  • [MySQL] MyISAM과 InnoDB 차이 | 내홈피 2014-05-20 01:20:47 #

    ... in 2014/05/20 No Comments MySQL의 InnoDB와 MyISAM 엔진의 차이는?? 간단히 정리..(그리고 함께 받은 R data type 질문)우선 한줄로 요약하면.. 필요에 따라 골라쓰자~(근데 나는 transaction 때문에 아마 InnoDB가 주가 되지 않을까 ... more

덧글

댓글 입력 영역

Google AdSense (text/image)