我正在关注Coursera的数据科学课程,我有一个关于其中一个分配的问题,我必须对矩阵进行逆转,然后缓存该结果。
基本上我一直在谷歌上搜索,但我找到了答案,但有部分答案我还不明白。出于这个原因,我不想提交我的作业,因为我不想提交任何我不完全理解的内容。
我从下面的代码中无法理解的部分是定义setInverse的部分。 'function(inverse)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
}
答案 0 :(得分:6)
我不知道你的具体任务,但我会略微改变你的功能:
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
函数仅从其封闭环境中获取这些函数。