Playing with Data/R | Python

데이터 타입 비교 - Vectors,Matrices, Arrays, Lists and Data Frames

아르센 루팽 2018. 1. 24. 13:37

R에서 사용하는 데이터 타입은 크게 Vectors, Matrices, Arrays, Lists and Data Frames 이렇게 5개로 구분해볼 수 있습니다. 이 타입의 구분은 R를 다룰 때 중요하므로, 한번 정리해보도록 하겠습니다.


1. 백터(Vector)

어느 자료를 보다보니, 벡터에 대해 다음과 같이 정의해놓았는데, 개인적으로 가장 잘 와닿는 정의라서 그대로 인용해보려고 합니다.

Vector is a collection of ordered homogeneous elements.

이는 "백터는 정렬된 동질적 요소의 집합"이라고 번역할 수 있습니다. 빨간색으로 강조된 것 중에서 "동질"이라는 것에 유의할 필요가 있습니다. 벡터는 숫자형과 문자형이 서로 섞여서 저장, 생성될 수 없습니다. 다음의 예제를 실행하고 결과를 살펴보면 쉽게 이해할 수 있습니다.

위 코드를 보면 vec1은 모두 숫자로 선언한 벡터이고, vec2는 문자와 숫자를 혼합해서 선언한 벡터입니다. 문제가 되는 경우는 vec2인데, 동일적인 요소만을 가질 수 있다고 해놓고 서로 다른 타입이 서로 혼합해서 선언이 되었습니다. 하지만 vec2를 print로 확인해보면 1이 "1"이라는 문자열로 치환되어 있다는 것을 확인할 수 있습니다. 따라서, 벡터는 서로 다른 타입이 함께 요소로 들어갈 수 없는 데이터타입이라고 정리할 수 있겠습니다.


2. 행렬(Matrix)

벡터에서 인용했던 자료와 동일한 자료에서, 행렬에 대해서는 다음과 같이 정의해놓았습니다.

Matrix is a vector with two-dimensional shape information.

이는 "행렬은 2차원적 형태의 정보를 가진 벡터"라고 번역할 수 있습니다. 원자료에서는 빨간색으로 "shape"이라는 것을 강조하고 있습니다. 정리하면 "모습" "벡터"가 키워드이고, 벡터라는 키워드를 통해 행렬 역시 모든 element가 동일한 형태만 담을 수 있다고 유추할 수 있습니다.

역시나 위 코드를 실행하면, mat2에는 element가 모두 문자열로 치환되어 등록되어 있네요.

한편, matrix에는 row.names, col.names, dimnames 함수를 통해 각 행과 열에 이름을 부여할 수 있습니다.

-- 선언 시, 이름을 함께 지정
mat1 <- matrix(c(c(11:13), c(21:23)), nrow = 3, ncol = 2, dimnames = list(c("Row1", "Row2", "Row3"), c("Col1", "Col2")))
print(mat1)


-- 선언 후, 이름 지정
row.names(mat1) <- c("Row1", "Row2", "Row3")
col.names(mat1) <- c("Col1", "Col2")

dimnames(mat1) <- list(c("Row1", "Row2", "Row3"), c("Col1", "Col2"))

추가적으로 행부터 채워나갈지, 아님 열부터 채워나갈지는 정의하기 위해서 matrix에는 byrow라는 인자값을 활용하면 됩니다.


3. 배열(Array)

배열은 행렬(Matrix)가 여러개 겹칠 수 있는 타입이라고 정리할 수 있습니다. 그렇게보면 행렬(Matrix)는 배열의 특수한 경우라 할 수 있죠. 다음의 코드를 한번 살펴보죠

dimension를 2, 8, 3으로 설정하였는데, 이는 2X8 행렬을 생성하고, 이 행렬이 3개가 만들어지는 것을 의미합니다. 그리고 행렬이 배열의 특수한 경우라고 언급한 거처럼 하나의 차원만 뽑아서 유형을 확인하면 matrix로 조회됨을 확인할 수 있습니다.


4. 리스트(List)

앞서 인용했던 자료에서, 리스트는 다음과 같이 정의해놓았습니다.

List is A vector with possible heterogeneous elements.

정리하면, 리스트는 벡터를 요소로 가지고 있으나, 이 벡터들이 서로 동질적인 타입이 아니여도 되는 데이터 타입입니다. 리스트의 요소에는 제약이 없습니다. 심지어 이미지에 대한 object도 설정가능합니다.


5. 데이터 프레임(Data frame)

마지막으로 데이터 프레임입니다. 앞서 인용했던 자료에서, 데이터 프레임은 다음과 같이 정의해놓았습니다.

Data frame is a list with possible heterogeneous vector elements of the same length .

정리하면, 데이터 프레임은 각 요소가 모두 동일한 길이를 가진 벡터로 구성된 리스트라고 할 수 있습니다. class로 확인하면 data.frame으로 조회되지만, 리스트이기 때문에, is.list로 확인하면 TRUE값을 반환하게 됩니다.



반응형