我正在学习 Coursera 上的数据科学类(class),我对其中一项作业有疑问,在该作业中我必须对矩阵求逆,然后缓存该结果。
基本上我一直在谷歌上搜索并找到了答案,但我还没有理解部分答案。出于这个原因,我不想提交我的作业,因为我不想提交任何我不完全理解的东西。
从下面的代码中我不明白的部分是 setInverse 定义的部分。 “函数(逆)inv”从何而来?尤其是“逆”从未定义过?
在此之后返回一个列表,这对我来说也没有多大意义?
如果有人能花时间向我解释这个功能,我将不胜感激!
makeCacheMatrix <- function(x = matrix()) {
inv <- NULL
set <- function(y) {
x <<- y
inv <<- NULL
}
get <- function() x
setInverse <- function(inverse) inv <<- inverse
getInverse <- function() inv
list(set = set,
get = get,
setInverse = setInverse,
getInverse = getInverse)
}
## Write a short comment describing this function
cacheSolve <- function(x, ...) {
## Return a matrix that is the inverse of 'x'
inv <- x$getInverse()
if (!is.null(inv)) {
message("getting cached data")
return(inv)
}
mat <- x$get()
inv <- solve(mat, ...)
x$setInverse(inv)
inv
}
最佳答案
我不知道你的确切任务,但我会稍微改变你的功能:
makeCacheMatrix <- function(x = matrix()) {
inv <- NULL
set <- function(y) {
x <<- y
inv <<- NULL
}
get <- function() x
setInverse <- function() inv <<- solve(x) #calculate the inverse
getInverse <- function() inv
list(set = set,
get = get,
setInverse = setInverse,
getInverse = getInverse)
}
然后你可以像这样使用它:
funs <- makeCacheMatrix()
funs$set(matrix(1:4, 2))
funs$get()
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
funs$setInverse()
funs$getInverse()
# [,1] [,2]
#[1,] -2 1.5
#[2,] 1 -0.5
该练习可能旨在教您 closures 。重点是
x
和 inv
存储在 set
、 get
、 setInverse
、 getInverse
函数的封闭环境中。这意味着定义它们的环境,即由 makeCacheMatrix()
调用创建的环境。看到这个:ls(environment(funs$set))
#[1] "get" "getInverse" "inv" "set" "setInverse" "x"
如您所见,此环境中不仅有四个函数,还有
x
和 inv
对象(使用 <<-
的结果)。 get
和 getInverse
函数只从它们的封闭环境中获取这些。关于R 编程 : cache the inverse of a matrix,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33738820/