2016-06-01 121 views
-2

我相乘這裏創建矩陣...矩陣乘數%*%的誤差

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

請注意,你的代碼一般是對我們沒用,因爲正在創建 – Ell

回答

0

的命令:

G = matrix 

分配的matrix其值是R功能分配給符號G。這顯然是而不是的矩陣。它的一個函數,當提供了正確的參數可能產生「數字/複數矩陣/向量參數」。這個錯誤是由%*%引發的,它測試矩陣乘法是否有意義。函數乘數字矩陣不會。

+0

儘管改變可變爲「M」,而不是「矩陣」被稱爲「總」無數據幀,錯誤仍然引發 – user3179277

+0

這是不足以提供足夠的上下文:什麼「變量」,什麼代碼? –

+0

在定義函數時,矩陣是要求的第一個變量。按照您的建議,「矩陣」作爲變量的名稱可能對程序不明確,所以我將變量名稱更改爲「m」。該行現在讀取'G = m',但錯誤仍然存​​在 – user3179277

0

在你的功能,因爲你已經使用G = matrix的摹有效地成爲矩陣功能,你是不是分配矩陣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(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 
>