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
>