2017-08-07 176 views
0

我想在coursEra上运行这个R编程课程的例子。然而,当我试图确定矩阵是否为方形,我得到错误说:“在is.square.matrix错误(X):参数x不是矩阵”R:函数来确定矩阵是否是正方形

我的代码如下:

library(matrixcalc) 
##non-square matrix 
NCols <- sample(3:6, 1) 
NRows <- sample(2:8, 1) 

myMat <- matrix(runif(NCols*NRows), ncol=NCols) 
is.square.matrix(myMat) 

## functions 
makeMatrix <- function(x = matrix()) { 
    m <- NULL 
    set <- function(y) { 
    x <<- y 
    m <<- NULL 
    } 
    get <- function() x 
    setInv <- if (is.square.matrix(x) == TRUE) { 
    function(solve) m <<- solve 
    } 
    { 
    function(ginv) m <<- ginv 
    } 
    getInv <- function() m 
    list(x, set = set, get = get, 
     setInv = setInv, 
     getInv = getInv) 
} 

cacheMatrix <- function(x, ...) { 
    m <- x$getInv() 
    if(!is.null(m)) { 
    message("getting cached data") 
    return(m) 
    } 
    data <- x$get() 
    m <- if (is.square.matrix(x) == TRUE) { 
    solve(data, ...) 
    } 
    { 
    ginv(data, ...) 
    } 
    x$setInv(m) 
    m 
} 

## run functions for matrix 
notSquare <- makeMatrix(myMat) 
cacheMatrix(notSquare) 


##check 
ginv(myMat) 

然后我得到的错误:

Error in is.square.matrix(x) : argument x is not a matrix

我是初学者所以不知道如何让sentInv识别和检查矩阵是方形或没有。

布赖恩

回答

0

没关系。在使用(x = matrix())替换x所需的makeMatrix函数中,并在cacheMatrix中将x替换为(data)

+0

请发表正确的代码。其他SO用户可能会感兴趣。 –

0

下面是答案。我只是做了函数(x)而不是函数(x = matrix()),并且'data'是在缓存函数中拉取矩阵的变量,需要我有这个输入。

##non-square matrix 
NCols <- sample(3:6, 1) 
NRows <- sample(2:8, 1) 

myMat <- matrix(runif(NCols*NRows), ncol=NCols) 
is.square.matrix(myMat) 

## functions 
makeCacheMatrix <- function(x) { 
     m <- NULL 
     set <- function(y) { 
       x <<- y 
       m <<- NULL 
     } 
     get <- function() x 
     setInv <- if (is.square.matrix(x) == TRUE) { 
       function(solve) m <<- solve 
     } 
     else { 
       function(ginv) m <<- ginv 
     } 
     getInv <- function() m 
     list(x, set = set, get = get, 
      setInv = setInv, 
      getInv = getInv) 
} 

cacheSolve <- function(x, ...) { 
     m <- x$getInv() 
     if(!is.null(m)) { 
       message("getting cached data") 
       return(m) 
     } 
     data <- x$get() 
     m <- if (is.square.matrix(data) == TRUE) { 
       solve(data, ...) 
     } 
     else { 
       ginv(data, ...) 
     } 
     x$setInv(m) 
     m 
} 

## run functions for myMat 
notSquare <- makeCacheMatrix(myMat) 
cacheSolve(notSquare) 


##check 
ginv(myMat) 
相关问题