Matrix Multiplier%*%错误

时间:2016-06-01 04:41:10

标签: r matrix

我在这里创建的矩阵相乘......

CreateMatrix <- function(frame,env){

  M = matrix(c(frame$EE[env],0,0,frame$Fe[env],
               frame$EL[env],frame$LL[env],0,0,
               0,frame$LP[env],frame$PP[env],0,
               0,0,frame$PA[env],frame$AA[env]), 
             nrow=4,byrow=T)
  return(M)
}

Models = list()
   for (i in seq(0,16)){
  newModel <- CreateMatrix(Total,i)
  Models[[i+1]] <- newModel
}

其中“总计”是数据框

...在以下函数中递归:

GrowthSeq <- function(matrix, t,P0){
 M0 = matrix(c(132,0,0,0),nrow=4)
 time = seq(0,t,1)
 G = matrix
 M = matrix(0,nrow=nrow(G),ncol=length(time))
 rownames(M)=c("Eggs","Larvae","Pupae","Adults")
 M[,1]= M0
 print(is.matrix(G))
 print(is.matrix(M))
 for (d in 2:length(time)){
   print(is.matrix(t(M[,d-1])))
   M[,d]<-G%*%t(M[,d-1])
 }
 return(M)
}

g <- GrowthSeq(Models[[1]],100,500)

结果是

[1] TRUE
[1] TRUE
[1] TRUE
Error in G %*% M[, d - 1] : 
  requires numeric/complex matrix/vector argument

我不明白我所乘的两个向量是如何矩阵的,但这个错误仍然存​​在。为什么我试图使矩阵M和G不能正常工作?

2 个答案:

答案 0 :(得分:0)

命令:

G = matrix

将作为R函数的matrix的值分配给符号G。显然不是矩阵。它是一个函数,当提供正确的参数时,可能创建一个“数字/复杂矩阵/向量参数”。 %*%测试错误是否测试矩阵乘法是否有意义。将数字矩阵乘以函数不会。

答案 1 :(得分:0)

在你的函数中,你没有为G指定矩阵,而是将矩阵函数指定给G。

> M = matrix(c(0,1,1,0), nrow = 2)
> M
     [,1] [,2]
[1,]    0    1
[2,]    1    0
> G = matrix
> G
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) 
{
    if (is.object(data) || !is.atomic(data)) 
        data <- as.vector(data)
    .Internal(matrix(data, nrow, ncol, byrow, dimnames, missing(nrow), 
        missing(ncol)))
}
<bytecode: 0x000000001434fab0>
<environment: namespace:base>
> G%*%M
Error in G %*% M : requires numeric/complex matrix/vector arguments

因为您已使用G = matrix,G有效地成为矩阵函数。在这里,我可以使用G创建矩阵,就像使用matrix

一样
> G(c(0,1,1,2), nrow = 2)
     [,1] [,2]
[1,]    0    1
[2,]    1    2

您需要使用矩阵函数为G分配矩阵,而不是将函数本身分配给G 。然后乘法也有效。

> G = matrix(c(0,1,1,2), nrow = 2)
> G
     [,1] [,2]
[1,]    0    1
[2,]    1    2
> G%*%M
     [,1] [,2]
[1,]    1    0
[2,]    2    1
>