├── README.md └── cachematrix.R /README.md: -------------------------------------------------------------------------------- 1 | ### Introduction 2 | 3 | This second programming assignment will require you to write an R 4 | function that is able to cache potentially time-consuming computations. 5 | For example, taking the mean of a numeric vector is typically a fast 6 | operation. However, for a very long vector, it may take too long to 7 | compute the mean, especially if it has to be computed repeatedly (e.g. 8 | in a loop). If the contents of a vector are not changing, it may make 9 | sense to cache the value of the mean so that when we need it again, it 10 | can be looked up in the cache rather than recomputed. In this 11 | Programming Assignment you will take advantage of the scoping rules of 12 | the R language and how they can be manipulated to preserve state inside 13 | of an R object. 14 | 15 | ### Example: Caching the Mean of a Vector 16 | 17 | In this example we introduce the `<<-` operator which can be used to 18 | assign a value to an object in an environment that is different from the 19 | current environment. Below are two functions that are used to create a 20 | special object that stores a numeric vector and caches its mean. 21 | 22 | The first function, `makeVector` creates a special "vector", which is 23 | really a list containing a function to 24 | 25 | 1. set the value of the vector 26 | 2. get the value of the vector 27 | 3. set the value of the mean 28 | 4. get the value of the mean 29 | 30 | 31 | 32 | makeVector <- function(x = numeric()) { 33 | m <- NULL 34 | set <- function(y) { 35 | x <<- y 36 | m <<- NULL 37 | } 38 | get <- function() x 39 | setmean <- function(mean) m <<- mean 40 | getmean <- function() m 41 | list(set = set, get = get, 42 | setmean = setmean, 43 | getmean = getmean) 44 | } 45 | 46 | The following function calculates the mean of the special "vector" 47 | created with the above function. However, it first checks to see if the 48 | mean has already been calculated. If so, it `get`s the mean from the 49 | cache and skips the computation. Otherwise, it calculates the mean of 50 | the data and sets the value of the mean in the cache via the `setmean` 51 | function. 52 | 53 | cachemean <- function(x, ...) { 54 | m <- x$getmean() 55 | if(!is.null(m)) { 56 | message("getting cached data") 57 | return(m) 58 | } 59 | data <- x$get() 60 | m <- mean(data, ...) 61 | x$setmean(m) 62 | m 63 | } 64 | 65 | ### Assignment: Caching the Inverse of a Matrix 66 | 67 | Matrix inversion is usually a costly computation and there may be some 68 | benefit to caching the inverse of a matrix rather than computing it 69 | repeatedly (there are also alternatives to matrix inversion that we will 70 | not discuss here). Your assignment is to write a pair of functions that 71 | cache the inverse of a matrix. 72 | 73 | Write the following functions: 74 | 75 | 1. `makeCacheMatrix`: This function creates a special "matrix" object 76 | that can cache its inverse. 77 | 2. `cacheSolve`: This function computes the inverse of the special 78 | "matrix" returned by `makeCacheMatrix` above. If the inverse has 79 | already been calculated (and the matrix has not changed), then 80 | `cacheSolve` should retrieve the inverse from the cache. 81 | 82 | Computing the inverse of a square matrix can be done with the `solve` 83 | function in R. For example, if `X` is a square invertible matrix, then 84 | `solve(X)` returns its inverse. 85 | 86 | For this assignment, assume that the matrix supplied is always 87 | invertible. 88 | 89 | In order to complete this assignment, you must do the following: 90 | 91 | 1. Fork the GitHub repository containing the stub R files at 92 | [https://github.com/rdpeng/ProgrammingAssignment2](https://github.com/rdpeng/ProgrammingAssignment2) 93 | to create a copy under your own account. 94 | 2. Clone your forked GitHub repository to your computer so that you can 95 | edit the files locally on your own machine. 96 | 3. Edit the R file contained in the git repository and place your 97 | solution in that file (please do not rename the file). 98 | 4. Commit your completed R file into YOUR git repository and push your 99 | git branch to the GitHub repository under your account. 100 | 5. Submit to Coursera the URL to your GitHub repository that contains 101 | the completed R code for the assignment. 102 | 103 | ### Grading 104 | 105 | This assignment will be graded via peer assessment. 106 | -------------------------------------------------------------------------------- /cachematrix.R: -------------------------------------------------------------------------------- 1 | ## Put comments here that give an overall description of what your 2 | ## functions do 3 | 4 | ## Write a short comment describing this function 5 | 6 | makeCacheMatrix <- function(x = matrix()) { 7 | 8 | } 9 | 10 | 11 | ## Write a short comment describing this function 12 | 13 | cacheSolve <- function(x, ...) { 14 | ## Return a matrix that is the inverse of 'x' 15 | } 16 | --------------------------------------------------------------------------------