2014-05-22 53 views
5

披露:這是從Coursera場編程分配簡稱R編程返回從一個高速緩存的對象的逆矩陣中的R

分配是關於,可能需要很長的計算時間詞法作用域和高速緩存功能。具體而言,我使用solve()來查找矩陣的逆並使用自由浮動變量對其進行緩存。我正在返回一個錯誤,如下所述。

首先,我存儲在一個函數的變量a<-makeCacheMatrix()然後我跑a$set(matrix(1:4,2,2)存儲矩陣

當我運行cacheSolve(a)我得到Error in as.vector(x, mode) : cannot coerce type 'closure' to vector of type 'any'

從我的理解我懷疑,我可能會傳遞一個原子矢量時它需要一個矩陣,但我不知道如何解決

我的代碼:

makeCacheMatrix <- function(x = matrix()) { 
    m<-NULL 
    set<-function(y){ 
    x<<-y 
    m<<-NULL 
} 
get<-function() x 
setmatrix<-function(solve) m<<- solve 
getmatrix<-function() m 
list(set=set, get=get, 
    setmatrix=setmatrix, 
    getmatrix=getmatrix) 
} 

cacheSolve <- function(x=matrix(), ...) { 
    m<-x$getmatrix() 
    if(!is.null(m)){ 
     message("getting cached data") 
     return(m) 
    } 
    matrix<-x$get 
    m<-solve(matrix, ...) 
    x$setmatrix(m) 
    m 
} 
+0

看看在cacheMatrix函數定義

matrix <- x$get 

。你實際傳遞給該函數的對象是什麼?什麼爲cacheMatrix創建了這個參數?它是矩陣嗎? – bwalter

回答

6

錯誤as.vector(X,模式):不能強制類型「閉合」到類型嘗試脅迫的功能到向量/矩陣「任意」

手段矢量。事實上,在這一行:

matrix <- x$get 
m <- solve(matrix, ...) 

matrix是一個函數,或solve需要一個矩陣。

你只需要改變這一行:由

matrix <- x$get() 
+0

多麼愚蠢的錯誤!非常感謝你的幫助。 –