我正在尝试在R中编写2个函数,一个创建矩阵并定义该矩阵及其逆的mutator和accessor函数(我认为这是正确的术语),另一个函数对该类型进行操作在第一个函数中定义的对象计算它们的反转(假设我的矩阵是可反转的)。
第二个函数1st检查变量inv是否包含其中的某些内容,如果它不是那么它是计算该矩阵的逆,并且如果在inv中有某些东西,则第二个函数是检索该值并打印它。我希望能够实现它,所以我的输入和输出如下所示:
>matrix<-makeMatrix(1:4,2,2)
>calcAndStoreInv(matrix)
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
>calcAndStoreInv(matrix)
getting cached data
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
这是我的代码
makeMatrix<-function(x=matrix()){
inv<-NULL
set<-function(y){
x<<-y
inv<<-NULL
}
get<-function() x
setInv<-function(input_inverse) inv<<-inpuut_inverse
getInv<-function () inv
list(set=set, get=get, setInv=setInv, getInv=getInv)
CalcAndStoreInv<-function(x,...){
inv<-x$getinv()
if (!is.null(inv)){
print("Getting cached data")
return(inv)
}
data<-x$get
inv<-solve(data)
x$setInv(inv)
}
当我在RStudio上逐行浏览我的代码时,它的行为与我期望的一样。但是,当我立即运行它时,我在as.vector中得到一个&#34;错误(x,mode_);不能强迫类型&#39;关闭&#39;矢量类型&#39;任何&#39;。我对闭包的理解非常有限 - 从我读到的内容我认为闭包是一个函数与它的环境之间的关联,包括函数中定义的局部变量。我把它看作属性,而不是一种向量。
那么,在R的上下文中,究竟什么是闭包?它如何适用于我的代码?我是否正确地阅读错误消息,因为闭包是一种向量(这会使它成为一种正确的数据类型),还是我还缺少其他东西?