您好我正在编写一个函数来缓存逆矩阵以最小化计算时间。
我希望函数会输出一个逆矩阵但是我得到一个错误,说我试图应用一个非函数。
第一段代码创建了一个为第二个函数设置数据的函数。理论上,这在矩阵中将其反转并存储它。
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)
}
我希望现阶段没有外出,因为我说它只是设置数据。低于casheSolve
的矩阵会根据makeCacheMatrix
cacheSolve <- function(x, ...) {
m <- x$getmarix()
if(!is.null(m)){
message("getting cached data")
return(m)
}
data <- x$get()
m <- solve(data,...)
x$setmatrix(m)
m
## Return a matrix that is the inverse of 'x'
}
这一切都正常,我的日志中没有错误。然后我去测试它,我得到一个错误。
n <- matrix(1:4,2,2)
h <- makeCacheMatrix(n)
cacheSolve(h)
cacheSolve(h)中的错误:尝试应用非功能
我有一个类似的函数来保存向量的平均值并且运行无错误我不确定我是否错过了将其从考虑向量转换为考虑矩阵的步骤。
查看该代码也可能有助于提供更好的要点,因此我将其包含在
之下makeVector <- function(x = numeric()) {
m <- NULL
set <- function(y) {
x <<- y
m <<- NULL
}
get <- function() x
setmean <- function(mean) m <<- mean
getmean <- function() m
list(set = set, get = get,
setmean = setmean,
getmean = getmean)
}
cachemean <- function(x, ...) {
m <- x$getmean()
if(!is.null(m)) {
message("getting cached data")
return(m)
}
data <- x$get()
m <- mean(data, ...)
x$setmean(m)
m
}
z <- makeVector()
z$set(1:4)
cachemean(z)
答案 0 :(得分:1)
这可以通过编辑拼写错误来修复
m <- x$getmarix()
应该阅读
m <- x$getmatrix()
然后代码工作正常。
感谢用户227710注意到这一点。