본문 바로가기

R 기초

R의 자료구조(3) : 배열, 행렬

반응형
R의 자료구조(3)

이 자료는 R markdown에서 작성하였습니다.
참고문헌: 빅데이터 통계 분석과 그래픽용 프로그래밍 언어의 대표 주자! 오픈소스 R

다차원 배열

  • array()함수를 이용해 다차원 배열을 생성할 수 있다.
  • 3차원 배열 예제
coordinates <- array(1:16, dim=c(2,8,2))
coordinates
## , , 1
## 
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,]    1    3    5    7    9   11   13   15
## [2,]    2    4    6    8   10   12   14   16
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,]    1    3    5    7    9   11   13   15
## [2,]    2    4    6    8   10   12   14   16
  • 다차원 배열 내의 원소에 접근하려면 해당 좌표를 각괄호[] 안에 표시
coordinates[1, , ]
##      [,1] [,2]
## [1,]    1    1
## [2,]    3    3
## [3,]    5    5
## [4,]    7    7
## [5,]    9    9
## [6,]   11   11
## [7,]   13   13
## [8,]   15   15
coordinates[1, 2, ]
## [1] 3 3
coordinates[1, 2, 2]
## [1] 3
  • dim(): 객체를 다차원 배열로 변환
values <- seq(1, 12, by=2)
values
## [1]  1  3  5  7  9 11
dim(values) <- c(2,3)
values
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    3    7   11

행렬

  • 행렬(matrix)은 2차원 배열의 특별한 경우
  • matrix() 함수를 이용해 생성
  • dim() 함수대신 nrow, ncol 옵션을 사용
values_matrix <- matrix(values, ncol=3, nrow=2)
values_matrix
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    3    7   11
  • 행렬 내 원소에 접근하려면 행과 열 번호를 인덱스로 이용
values_matrix[2,2]
## [1] 7
  • 행렬과 배열은 벡터와 같은 방식의 인덱싱이 가능
values_matrix[1]
## [1] 1
values_matrix[2]
## [1] 3
values_matrix[3]
## [1] 5
values_matrix[4]
## [1] 7
  • length(): 행렬이나 배열 내에 포함된 원소의 개수
length(values_matrix)
## [1] 6
  • rbind(), cbind()를 이용해 행렬 만드는 방법
x <- c(1,5,9)
y <- c(3,7,11)
rbind(x,y)
##   [,1] [,2] [,3]
## x    1    5    9
## y    3    7   11
cbind(x,y)
##      x  y
## [1,] 1  3
## [2,] 5  7
## [3,] 9 11

행렬과 배열 주의사항

  • is.matrix(), is.array(): 행렬인지 배열인지 확인하는 함수
  • as.matrix(), as.array(): 행렬과 배열로 바꿔주는 함수
  • 특정 클래스를 요구하는 패키지 혹은 함수를 사용할 때 주의 필요
  • 단순한 벡터라도 다양한 방식으로 저장이 가능
  • 개체와 함수는 클래스에 따라 다른 형태를 보임에 유의할 필요가 있음
  • 이는 빈번한 프로그래밍 오류의 원인
x <- c(1,6,12)
str(x)
##  num [1:3] 1 6 12
str(matrix(x, ncol=1))
##  num [1:3, 1] 1 6 12
str(array(x, 3))
##  num [1:3(1d)] 1 6 12
반응형