행렬 (matrix)

- 동일한 자료형인 원소로 구성된 2차원의 자료 구조 

 

 

 

 

배열 (array)

- matrix의 확장된 형태로 3차원 이상의 배열을 의미

- 동일한 자료형, n 차원 이상

array(<원소가 될 vector>,dim = c(행의 수, 열의 수, 페이지 수))
# 참조
<객체명> [<row_index>, <col_index>, <page_index>]
<객체명> [<row_index>, , ]
<객체명> [, <col_index>, ]
<객체명> [, , <page_index>]
# 예시
# 첫 항이 0이고 끝 항이 10인 길이가 48이 되는 등차수열을 원소로 가지는 3X4X4 배열 arry1
arry1 = array(seq(0, 10, length = 48), dim = c(3,4,4))

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

 

 

 

 

 

리스트(list)

- vector와 같은 선형구조

- 각 원소별로 다양한 형태의 자료를 가질 수 있는 다중자료형

- key와 value가 한 쌍으로 저장되며, list에 있는 자료를 참조할 경우 $를 사용

 

# 리스트 자료형 생성

vec1 = c(1,30,-3)
vec2 = c("apple", "banana", "pear")
vec3 = 1:9
arry = array(1:45, dim = c(3,5,3))
mat = arry[,,1]

l = list(vec1, vec2, vec3, arry, mat)

 

# list 참조

l
l[1] ; str(l[1]) 
# 출력 형태
# List of 1
# $ : num [1:3] 1 30 -3

l[[1]] ; str(l[[1]])
# 출력 형태
#  num [1:3] 1 30 -3

names(l)

여기서 출력형태가 l[1]과 l[[1]] 이 다른 이유는 l은 리스트의 형태인데

l[1]은 리스트에서의 첫 번째 값을 통째로 가져왔다고 하는 것이고

l[[1]]은 리스트에 있는 첫 번째의 값을 껍질을 까서 가져왔다고 하는거라서 출력형태가 다른 것이다. 

 

l = list(v1 = vec1, v2 = vec2, v3 = vec3, arry = arry, mtrx = mat) 
# 리스트의 각 원소에 대한 이름 지정
names(l) 
l
l[1] ; str(l[1]) 
# List of 1
#  $ v1: num [1:3] 1 30 -3 
# $ 옆에 이름이 붙어서 나옴. 
# v1을 참조했다는 뜻 

l[[1]] ; str(l[[1]])
# num [1:3] 1 30 -3

names(l)
l$v1 ; l$arry
names(l) = c("e1", "e2", "e3", "e4", "e5"

 

 

 

 

데이터 프레임(data.frame)

- 행과 열로 구성된 2차원 표

- 열 단위로 서로 다른 자료형의 벡터를 저장할 수 있음.

- 각 열에 해당하는 벡터의 길이가 같음.

- 데이터 프레임 생성할 때 vector 여러개를 저장할 수는 있지만 matrix를 저장을 vector와 같이 하면 자료가 이상해지는 것을 확인할 수 있음.

 

# data.frame의 생성
# vector를 이용

vec1 = c(1,30,-3)
vec2 = c("apple", "banana", "pear")
vec3 = 1:9
arry = array(1:45, dim = c(3,5,3))
mat = arry[,,1]

dat1 = data.frame(num1 = vec1, 
                  chr1 = vec2, 
                  num2 = vec3[1:3] 
                  )
dat1
# data.frame의 생성
# matrix를 이용
dat2 = data.frame(mat)

matrix와 dat2의 차이점 비교

 

dat1의 첫 번째값과 두 번째 값 찾아서 각각 5번씩 출력 

dat3 = dat1[rep(1:2, each = 5),]


참조 

dat1$x1
dat2[1,]
dat2[,3]
names(dat3) = c("v1", "v2", "v3") #데이터 프레임 변수 이름 변경

+ Recent posts