R 矩阵乘法器%*%错误

R 矩阵乘法器%*%错误,r,matrix,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]),

我在乘以这里创建的矩阵

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
}
我不明白我所乘的两个向量怎么都是矩阵,但这个错误仍然存在。为什么我尝试乘法矩阵M和G不起作用?

命令:

G = matrix

为符号
G
分配作为R函数的
矩阵的值。这显然不是一个矩阵。它是一个函数,当提供正确的参数时,可能会生成“数值/复杂矩阵/向量参数”。该错误由whcih测试矩阵乘法是否有意义时抛出。用一个函数乘以一个数值矩阵并不是这样。

在你的函数中,你并没有把一个矩阵赋给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,而不是将函数本身分配给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
> 

尽管将变量更改为“m”而不是“矩阵”,但仍会出现错误,这不足以提供足够的上下文:什么“变量”,什么代码?在定义函数时,矩阵是请求的第一个变量。正如您所建议的,变量“matrix”的名称对程序来说可能不明确,因此我将变量名称更改为“m”。该行现在显示为“G=m”,但错误仍然存在,表示
m
是一个列表。请编辑您的问题,使其反映实际正在做的事情!!!!!!!!!!首先它是一个函数,现在它是一个列表。在任何时候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(c(0,1,1,2), nrow = 2)
     [,1] [,2]
[1,]    0    1
[2,]    1    2
> 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
>