1
- # # Put comments here that give an overall description of what your
2
- # # functions do
1
+ # #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2
+ # # R Programming on Coursera
3
+ # # Programming Assignment #2: Create two functions
4
+ # #
5
+ # # (1) makeCacheMatrix
6
+ # # This function creates a special "matrix" object that can cache its inverse.
7
+ # # For this assignment, assume that the matrix supplied is always invertible.
8
+ # # (2) cacheSolve:
9
+ # # This function computes the inverse of the special "matrix" returned by makeCacheMatrix above.
10
+ # # If the inverse has already been calculated (and the matrix has not changed), then cacheSolve retrieves the inverse from the cache.
11
+ # #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3
12
4
- # # Write a short comment describing this function
5
13
6
- makeCacheMatrix <- function (x = matrix ()) {
14
+ # # Function #1: makeCacheMatrix
15
+ # # makeCacheMatrix takes an invertible, square matrix and returns a list of four functions that:
16
+ # # (1) set the value of the matrix (2) get the value of the matrix (3) set the value of the inverse (4) get the value of the inverse
7
17
18
+ makeCacheMatrix <- function (x = matrix ()) {
19
+ if (ifelse(nrow(x ) == ncol(x ), ifelse(det(x ) != 0 , TRUE , FALSE ), FALSE )) { # check if the matrix square and invertible
20
+ inv <- NULL
21
+ set <- function (y ) {
22
+ x <<- y
23
+ inv <<- NULL
24
+ }
25
+ get <- function () x
26
+ setInverse <- function (solve ) inv <<- solve
27
+ getInverse <- function () inv
28
+ list (set = set , get = get ,
29
+ setInverse = setInverse ,
30
+ getInverse = getInverse )
31
+ }
32
+ else { # if matrix not square and invertible, then throw an error
33
+ message(" [makeCacheMatrix error]: 'x' must be a square, invertible matrix" )
34
+ }
8
35
}
9
36
10
37
11
- # # Write a short comment describing this function
38
+
39
+
40
+ # # FUNCTION #2: cacheSolve
41
+ # # cacheSolve takes the list created by makeCacheMatrix and returns the inverse of the matrix represented in that list.
42
+ # # If the inverse has already been calculated, cacheSolve pulls the inverse from the cache.
43
+ # # Otherwise, cacheSolve calculates and sets the value of the inverse in the cache.
12
44
13
45
cacheSolve <- function (x , ... ) {
14
- # # Return a matrix that is the inverse of 'x'
15
- }
46
+ inv <- x $ getInverse()
47
+ if (! is.null(inv )) {
48
+ message(" getting cached data" )
49
+ return (inv )
50
+ }
51
+ data <- x $ get()
52
+ inv <- solve(data , ... )
53
+ x $ setInverse(inv )
54
+ inv
55
+ }
0 commit comments