forked from rdpeng/ProgrammingAssignment2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cachematrix.R
50 lines (43 loc) · 1.41 KB
/
cachematrix.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
## Caching the computed inverse of a matrix.
# This function creates a special "matrix" object that can cache its inverse.
makeCacheMatrix <- function(current_matrix = matrix())
{
current_inverse <- NULL
getMatrix <- function() {
current_matrix
}
getInverse <- function() {
current_inverse
}
setMatrix <- function(new_matrix) {
if (!matequal(current_matrix, new_matrix)) {
current_matrix <<- new_matrix
current_inverse <<- NULL
}
}
setInverse <- function(new_inverse) {
current_inverse <<- new_inverse
}
list(getMatrix = getMatrix, getInverse = getInverse,
setMatrix = setMatrix, setInverse = setInverse)
}
# This function computes the inverse of the special "matrix" returned by
# `makeCacheMatrix` above. If the inverse has already been calculated (and the
# matrix has not changed), then `cacheSolve` retrieves the inverse from the
# cache.
cacheSolve <- function(cacheMatrix, ...)
{
inverse <- cacheMatrix$getInverse()
if (is.null(inverse)) {
inverse <- solve(cacheMatrix$getMatrix(), ...)
cacheMatrix$setInverse(inverse)
}
else {
message("getting cached data")
}
inverse
}
# Compare two matrices for equality.
# Source: https://stat.ethz.ch/pipermail/r-help/2012-June/315408.html
matequal <- function(x, y)
is.matrix(x) && is.matrix(y) && dim(x) == dim(y) && all(x == y)