|
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 | 1 | ### Assignment: Caching the Inverse of a Matrix |
66 | 2 |
|
67 | 3 | Matrix inversion is usually a costly computation and there may be some |
68 | 4 | 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. |
| 5 | +repeatedly. |
72 | 6 |
|
73 | | -Write the following functions: |
| 7 | +There are two functions: |
74 | 8 |
|
75 | 9 | 1. `makeCacheMatrix`: This function creates a special "matrix" object |
76 | 10 | that can cache its inverse. |
77 | 11 | 2. `cacheSolve`: This function computes the inverse of the special |
78 | 12 | "matrix" returned by `makeCacheMatrix` above. If the inverse has |
79 | 13 | 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. |
| 14 | + `cacheSolve` will retrieve the inverse from the cache. |
| 15 | + |
0 commit comments