0. letters는 알파벳 소문자 상수벡터입니다. 다음을 입력하여 결과를 제시하시오

letters
letters[22]
letters[1:7]

letters
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
letters[22]
## [1] "v"
letters[1:7]
## [1] "a" "b" "c" "d" "e" "f" "g"

1. 1부터 12까지의 숫자 벡터로 3x4 행렬을 생성하여 변수 mtx를 할당하고, 알파벳 소문자 상수 벡터인 letters를 이용하여 행이름과 열 이름을 지정하고 출력하시오.

mtx <- matrix(1:12,nrow=3,ncol=4)
rownames(mtx) <- letters[1:3]
colnames(mtx) <- letters[4:7]
# list 활용: 
# dimnames(mtx) <- list(letters[1:3], letters[1:4])
mtx
##   d e f  g
## a 1 4 7 10
## b 2 5 8 11
## c 3 6 9 12

2. 1번 문제에서 생성한 mtx행렬로 부터 첫번째와 세번째 열을 추출하여 부분행렬을 만들고, 두번째와 네번째 열을 추출하여 부분행렬을 만든 후, 이들을 열의 방향으로 결합한 새로운 행렬 mtx.c를 생성후 출력하시오

mtx1 <- mtx[,c(1,3)]
mtx2 <- mtx[,c(2,4)]
mtx.c <- cbind(mtx1,mtx2)
# mtx.c <- cbind(mtx[,c(1,3)], mtx[,c(2,4)])
mtx.c
##   d f e  g
## a 1 7 4 10
## b 2 8 5 11
## c 3 9 6 12

3. 1번 문제와 2번 문제에서 생성한 mtx행열과 mtx.c행렬을 이용하여 다음 연산을 수행하고 결과를 제시하시오(오류가 나오는 경우 오류가 나오는 이유를 제시하시오)

3 * mtx

3*mtx
##   d  e  f  g
## a 3 12 21 30
## b 6 15 24 33
## c 9 18 27 36

mtx + 3

mtx+3
##   d e  f  g
## a 4 7 10 13
## b 5 8 11 14
## c 6 9 12 15

mtx + mtx.c

mtx + mtx.c
##   d  e  f  g
## a 2 11 11 20
## b 4 13 13 22
## c 6 15 15 24

mtx - mtx.c

mtx-mtx.c
##   d  e f g
## a 0 -3 3 0
## b 0 -3 3 0
## c 0 -3 3 0

mtx * mtx.c

mtx*mtx.c 
##   d  e  f   g
## a 1 28 28 100
## b 4 40 40 121
## c 9 54 54 144

mtx / mtx.c

mtx / mtx.c
##   d         e    f g
## a 1 0.5714286 1.75 1
## b 1 0.6250000 1.60 1
## c 1 0.6666667 1.50 1

mtx %*% mtx.c

# Error in mtx %*% mtx.c : 적합한 인자들이 아닙니다
# mtx(3x4)와 mtx.c(3x4)에서, 4와 3이 다름으로 계산 불가능!

4. 다음 코드를 수행하고 결과를 제시하시오.

matrix(1:4, nrow=2)^(1:4)

matrix(1:4, nrow=2)^(1:4)
##      [,1] [,2]
## [1,]    1   27
## [2,]    4  256

5. 첫번째 열은 1:10벡터로 구성되고 두번째 열은 첫번째 열의 두배, 세번째 열은 첫번째 열이 세배, 네번째 열은 첫번째 열이 네배, 다섯번째 열은 첫번째 열의 다섯배인 10x5행렬을 생성하시오. 문자 a부터 j까지 10개의 문자로 행 이름을 지정하고 h행의 합을 구하시오.

x1 <- 1:10
x2 <- x1*2
x3 <- x1*3
x4 <- x1*4
x5 <- x1*5
mtx <- cbind(x1,x2,x3,x4,x5)
# x <- 1:10
# mtx <- cbind(x1=x, x2=x*2, x3=x*3, x4=x*4, x5=x*5)
# mtx <- cbind(x, x*2, x*3, x*4, x*5) 단, colnames(mtx)는 "x" "" "" "" ""
rownames(mtx) <- letters[1:10]
mtx
##   x1 x2 x3 x4 x5
## a  1  2  3  4  5
## b  2  4  6  8 10
## c  3  6  9 12 15
## d  4  8 12 16 20
## e  5 10 15 20 25
## f  6 12 18 24 30
## g  7 14 21 28 35
## h  8 16 24 32 40
## i  9 18 27 36 45
## j 10 20 30 40 50
sum(mtx['h',])
## [1] 120

6. 1부터 9999까지의 정수로 9개의 열을 갖는 행렬을 생성하고, 마지막 세개 행과 마지막 두개 열로 구성된 3x2 부분 행렬을 만들고 출력하시오.

mtx <- matrix(1:9999, ncol=9)
mtx.sub <- mtx[(dim(mtx)[1]-2):dim(mtx)[1],(dim(mtx)[2]-1):dim(mtx)[2]]
mtx.sub
##      [,1] [,2]
## [1,] 8886 9997
## [2,] 8887 9998
## [3,] 8888 9999

7. 다음과 같은 세개의 벡터의 자료형을 확인하고, 세개 벡터를 열의 방향으로 결합하여 행렬 mtx를 생성하시오. 행렬을 구성하는 세개 열이 원래의 벡터와 같은지 확인하고 다르다면 그 이유를 제시하시오.

x <- c(1:3)
y <- x^2
z <- letters[1:3]

x <- c(1:3)
x
## [1] 1 2 3
class(x) # 정수형
## [1] "integer"
y <- x^2
y
## [1] 1 4 9
class(y) # 실수형
## [1] "numeric"
z <- letters[1:3]
z
## [1] "a" "b" "c"
class(z) # 문자형
## [1] "character"

matrix는 동일 자료형만 저장 가능

int이 numeric과 함께 matrix에 저장되면, numeric으로

int과 numeric이 char과 함께 matrix에 저장되면, char로 바뀜

mtx <- cbind(x,y,z)
class(mtx[,1]) # x
## [1] "character"
class(mtx[,2]) # y
## [1] "character"
class(mtx[,3]) # z
## [1] "character"
mtx
##      x   y   z  
## [1,] "1" "1" "a"
## [2,] "2" "4" "b"
## [3,] "3" "9" "c"

8. 1부터 12까지의 숫자 벡터로 3x4행렬 mtx를 생성하고, 다음 연산의 결과 가운데 원래의 행렬 mtx와 같지 않은 것을 고르시오. 이 후 diag(3)을 실행하고 결과를 제시하시오.

mtx <- matrix(1:12,nrow=3,ncol=4)
mtx
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

mtx * 1

mtx * 1 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

mtx %*% matrix(1, ncol(mtx)) : mtx와 다름!!!

mtx %*% matrix(1,ncol(mtx)) 
##      [,1]
## [1,]   22
## [2,]   26
## [3,]   30

t(t(mtx))

t(t(mtx))
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

mtx %*% diag(ncol(mtx))

mtx %*% diag(ncol(mtx))
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
diag(3) # 대각행렬: 정방행렬 중에 대각요소를 제외한 원소들이 0인 것
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1

9. 다음과 같은 행렬 mtx를 생성하고, 777번째 행 3번째 열에 있는 값을 추출하시오.

matrix(1:10000, 1000)

mtx <- matrix(1:10000, 1000)
mtx[777,3]
## [1] 2777

10.1부터 24까지의 숫자 벡터로 3x4x2 배열(array) a를 제시하시오.

a <- 1:24
dim(a) <- c(3,4,2)
# a <- array(1:24, dim=c(3,4,2))
a
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24