我正在学习 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 。重点是 xinv 存储在 setgetsetInversegetInverse 函数的封闭环境中。这意味着定义它们的环境,即由 makeCacheMatrix() 调用创建的环境。看到这个:
ls(environment(funs$set))
#[1] "get"        "getInverse" "inv"        "set"        "setInverse" "x"

如您所见,此环境中不仅有四个函数,还有 xinv 对象(使用 <<- 的结果)。 getgetInverse 函数只从它们的封闭环境中获取这些。

关于R 编程 : cache the inverse of a matrix,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33738820/

10-10 11:11