Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b165aaa

Browse files
committed
Make use of any function with variable parameter list
1 parent 33758d9 commit b165aaa

File tree

1 file changed

+35
-26
lines changed

1 file changed

+35
-26
lines changed

cachematrix.R

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,47 @@
1-
## Creating a special object for calculating properties of matrix
2-
## e.g. inverse with caching options
3-
4-
## Class for creating matrices with
5-
## ability to cache results of operations
6-
7-
CachedOpsMatrix <- setRefClass("CachedOpsMatrix",
8-
fields = list(value = "matrix" ),
1+
## Creating a special object for caching calculations
2+
# example:
3+
# m <- matrix(1:4,c(2,2))
4+
# mci <- makeCacheMatrix(m, func = function(m){message("calculating");solve(m)})
5+
# cacheSolve(mci)
6+
# cacheSolve(mci) # should not print message again, should insted inform about cache use
7+
# mcs <- makeCacheMatrix(m, c(1,1))
8+
# cacheSolve(mcs)
9+
10+
# Class for creating matrices with
11+
# ability to cache results of operations
12+
CachedOps <- setRefClass("CachedOps",
13+
fields = list(func = "function", cache = "ANY"),
914

1015
methods = list(
11-
initialize = function(...){
12-
my.inverse <<- NULL
13-
callSuper(...)
16+
initialize = function(...,func){
17+
cache <<- NULL
18+
func <<- function(){
19+
func(...)
20+
}
21+
callSuper()
1422
},
1523

16-
getInverse = function(){
17-
"Calculating inverse of matrix. Once it was calculated result is cached and returned in any consecutive call"
18-
if(is.null(my.inverse))
19-
my.inverse <<- solve(value)
24+
getResult = function(){
25+
"Calculating result of operation on matrix.
26+
Once it was calculated result is cached and returned in any consecutive call"
27+
if(is.null(cache))
28+
cache <<- func()
2029
else message("getting cached data")
21-
my.inverse
30+
cache
2231
})
2332
)
2433

25-
## Creating new caching object
26-
27-
makeCacheMatrix <- function(x = matrix()) {
28-
CachedOpsMatrix$new(value = x)
34+
makeCacheMatrix <- function(..., func = solve) {
35+
# Creating new caching object
36+
# Args:
37+
# func - function, result of calculation is need to cache
38+
# ... - parameters for function calling
39+
CachedOps$new(..., func = func)
2940
}
3041

31-
32-
## Calculating inverse of matrix
33-
## once it was calculated result is cached
34-
## and returned in any consecutive call
35-
3642
cacheSolve <- function(x, ...) {
37-
x$getInverse()
43+
# Calculating result of function on matrix
44+
# once it was calculated result is cached
45+
# and returned in any consecutive call
46+
x$getResult()
3847
}

0 commit comments

Comments
 (0)