역시 어제 MySQL InnoDB vs MyISAM과 함께 받은 질문..
감만 잡고 있으면 말로 표현하도록 정리가 안 된다. TㅅT
numeric, character와 같은 primitive type도 있지만, 많이 사용되는 유용한 data type이 있다. 구분해 보자..
vector
R primitive type 을 담는 ordered list (index는 1 부터 시작)
같은 타입의 element만을 담을 수 있다는 제약이 있다.
c() 함수를 사용해서 생성
배열처럼 생각하면 편하다.
factor
vector와 비슷하다.
Java의 enum처럼 이름만 있는 nominal이다. (level로 값을 구분)
(내부적으로는 1, 2, 3 처럼 숫자로 처리해서 메모리 등을 아끼려는 의도인듯)
factor() 함수를 통해서 factor로 변경 가능
matrix
2차원 행렬 (3차원 이상의 다차원 행렬은 array를 사용한다)
matrix() 함수를 사용한다.
array
matrix처럼 행렬을 나타낸다.
array() 함수를 사용하며, 3차원 이상의 행렬을 표현할 수 있다.
list
vector와 비슷하다. (단, element가 모두 같은 타입일 필요는 없다.)
ordered list (역시 index는 1 부터 시작)
element로 vector 등이 들어가는 경우 matrix나 array와는 달리 row 길이가 서로 달라도 상관없다.
list() 함수를 사용한다.
data frame
matrix 보다 유연하게 여러 타입의 element를 가질 수 있다.
list와는 달리 row 개수가 동일해야 한다.
data.frame() 함수를 사용한다.
열 마다 이름을 지정해 줄 수 있다.
- 참고
Quick-R: Data Types
R Introduction | R Tutorial
R Tutorial: The Basic Data Types
R Programming/Data types - Wikibooks
감만 잡고 있으면 말로 표현하도록 정리가 안 된다. 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"
> 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
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
> 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"
> 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"
> 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
> 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
덧글