갈루아의 반서재

1. logical


True/False 값(Boolean values)을 포함하는 logical 클래스에 대해 알아보자.






> logical1 = c(T,F,F)

> logical1

[1]  TRUE FALSE FALSE

> class(logical1)

[1] "logical"



2. vector 


데이터 타입으로서의 vector 는 수학의 벡터와는 다르게 정의된다. 

vector 타입은 일견 기존의 numeric, character, logical 과 중복된 것처럼 보일 수 있지만, vector 타입의 장점은 numeric, character, logical 모두를 포함할 수 있다는 것이다. 


> vector1 = vector(mode="logical",3)

> vector1

[1] FALSE FALSE FALSE


특정 타입의 새로운 벡터를 mode="" 과 같은 방식을 통해 만들 수 있다. 

그리고 나서 아래와 같이 실제 값으로 변경가능하다. 


> vector2=vector(mode="numeric",4)

> vector2

[1] 0 0 0 0

> vector2[3] = 5

> vector2

[1] 0 0 5 0



3. matrix


matrix 는 사실상 이차원 vector 이다. 

martix 는 vector 가 포함할 수 있는 모든 유형의 데이터 타입을 포함할 수 있지만, 하나의 데이터 타입만 matrix 내에 존재할 수 있다는 제한사항 역시 포함한다. 




> matrix1 = matrix(1:9, nrow=3)

> matrix2 = matrix(c(T,F,T,T,F,T), ncol=3)

> matrix2

      [,1] [,2]  [,3]

[1,]  TRUE TRUE FALSE

[2,] FALSE TRUE  TRUE

> class(matrix2)

[1] "matrix"



행렬에서 하나의 행이나 열을 제거하면, 새로운 객체는 행렬의 각각의 콤포넌트가 속해있는 클래스로 돌아간다. 


> matrix2[1,]

[1]  TRUE  TRUE FALSE

> class(matrix2[1,])

[1] "logical"



4. array


한 유형의 데이터 타입만 포함할 수 있지만, 저장할 수 있는 데이터 타입 셋트의 크기가 더 크다. 

그리고 array 는 matrices 를 구성요소로 포함할 수 있고, frames 와 lists 라는 두 가지 다른 유형의 데이터 타입도 저장할 수 있다. 

array 는 역시 다차원이며, dim=c() 과 같은 식을 이용하여 벡터를 만든다.




> array1 = array(1:16, dim=c(4,2,2))

> array1

, , 1


     [,1] [,2]

[1,]    1    5

[2,]    2    6

[3,]    3    7

[4,]    4    8


, , 2


     [,1] [,2]

[1,]    9   13

[2,]   10   14

[3,]   11   15

[4,]   12   16




, , 1 과 , , 2 는 현재의 depth 이다.

위의 4 x 2 x 2 array 에서 첫번째 수는 첫번째 차원의 요소를 나타내며, 두번째 수는 두번째 차원의 요소를 나타낸다.



5. data.frame


data frame 은 아래에서 보는 바와 같이 이름을 지정해줌으로써 행과 열을 자유롭게 구성할 수 있으며, 각각의 열이 서로 다른 데이터 타입을 가질 수 있도록 해준다. 



> myvalues1 = c(348, -343, 937, 394, 124)

> myvalues2 = c(T, F, T, T, F)

> names = c("Trial 1", "Trial 2", "Trial 3", "Trial 4", "Trial 5")

> dataframe1=data.frame(myvalues1,myvalues2,row.names =names)

> dataframe1

        myvalues1 myvalues2

Trial 1       348      TRUE

Trial 2      -343     FALSE

Trial 3       937      TRUE

Trial 4       394      TRUE

Trial 5       124     FALSE



data.frame() 명령어는 열을 지정해주는데, 행의 경우 row.names 변수를 통해 지정한다. 열의 이름을 바꾸고 싶은 경우 names() 함수를 이용한다. 


> names(dataframe1)[1]="Velocity"

> dataframe1

        Velocity myvalues2

Trial 1      348      TRUE

Trial 2     -343     FALSE

Trial 3      937      TRUE

Trial 4      394      TRUE

Trial 5      124     FALSE




6. list


vector 와 유사하지만 list 의 경우 어떤 유형의 데이터 타입도 하나에 담을 수 있다.



> list1 = list("thing1", 1.5, FALSE)

> list1

[[1]]

[1] "thing1"


[[2]]

[1] 1.5


[[3]]

[1] FALSE


각각의 아이템에 대해 섹션을 만든다는 것도 특이점이며, [[]] 를 통해 각각의 섹션에 접근할 수 있다.


> list1[[1]]

[1] "thing1"


섹션별로 서로 다른 이름을 부여할 수도 있다.


> list2 = list(category1 = c("thing1", "thing2"), category2 = 1.5, category3 = c(FALSE, TRUE))

> list2

$category1

[1] "thing1" "thing2"


$category2

[1] 1.5


$category3

[1] FALSE  TRUE


list2 의 특정 섹션에는 아래와 같이 접근한다.


> list2$category3

[1] FALSE  TRUE


다음과 같이 특정 섹션의 값을 변경한다.


> list2$category2 = 5

> list2$category2

[1] 5