我使用的是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;是相同的。)
答案 0 :(得分:3)
x <<- y
创建x
,然后由get()
检索。请注意,get
也是一个基本函数,并在此处被覆盖。我主张避免这种情况,即使它只限于某个功能。 ad hoc 解决方案是通过get
达到基本base::get
功能。
行get <- function() x
是
get <- function() {
x
}
如果只有一行或使用;
的单独语句,短版本将起作用。我用这段代码最大的牛肉就是没有用论据。这可能适用于Java或其他语言,但我不认为是R方式。修改这样的对象可能会导致意外的行为,这可能导致艰苦的调试。
setInverse
和getInverse
不一样。他们所做的是反向或得到它。
答案 1 :(得分:0)
你知道这项任务的目标是创建一个超级矩阵,可以存储它的内容,它也是反向的。所以它必须有2个变量x
矩阵,inv
反转。每个变量都有2个函数set
和get
。因此,set
是一个接受参数并在其中执行某些操作的函数,在此代码中set
将y
作为参数(虚拟变量可以是任何其他名称)并将其分配给矩阵x
。 inv
也是如此。
这将使这些变量的唯一访问权限通过set
和get
。
请注意:(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