关于课程R编程课程作业2词汇范围

时间:2017-03-29 12:34:10

标签: r

我使用的是Win7 64x Rstudio版本3.3.2。

以下功能是其他人提交的assignmet2解决方案。

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)
}

首先在函数makeCacheMatrix中,为什么要设置函数&#39;使用变量&#39; y&#39;? 它只是用来告诉我们如何使用&#39;&lt;&lt; - &#39;?

其次,在&#39;获取功能&#39;,为什么变量&#39; x&#39;其次是函数的括号? (&#39; setInverse函数 - inv&lt;&lt; -inverse&#39;,&#39; getInverse函数 - inv&#39;是相同的。)

2 个答案:

答案 0 :(得分:3)

x <<- y创建x,然后由get()检索。请注意,get也是一个基本函数,并在此处被覆盖。我主张避免这种情况,即使它只限于某个功能。 ad hoc 解决方案是通过get达到基本base::get功能。

get <- function() x

的“简短”版本
get <- function() {
  x
}

如果只有一行或使用;的单独语句,短版本将起作用。我用这段代码最大的牛肉就是没有用论据。这可能适用于Java或其他语言,但我不认为是R方式。修改这样的对象可能会导致意外的行为,这可能导致艰苦的调试。

setInversegetInverse不一样。他们所做的是反向或得到它。

答案 1 :(得分:0)

你知道这项任务的目标是创建一个超级矩阵,可以存储它的内容,它也是反向的。所以它必须有2个变量x矩阵,inv反转。每个变量都有2个函数setget。因此,set是一个接受参数并在其中执行某些操作的函数,在此代码中sety作为参数(虚拟变量可以是任何其他名称)并将其分配给矩阵xinv也是如此。

这将使这些变量的唯一访问权限通过setget

请注意:(R文档)  The operators <<- and ->> are normally only used in functions, and cause a search to be made through parent environments for an existing definition of the variable being assigned

现在,如果我们想要使用这个功能:

mat <- makeCacheMatrix()

## set the matrix value
mat$set(matrix(data = (1:10), nrow = 5, ncol = 2))

## Check that we stored it correctly
mat$get()
# [,1] [,2]
# [1,]    1    6
# [2,]    2    7
# [3,]    3    8
# [4,]    4    9
# [5,]    5   10