我在这里创建的矩阵相乘......
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不能正常工作?
答案 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
>