2016-06-01 8 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

ある「合計」の代わりに「マトリックス」の「M」に、変数を変更するにもかかわらず – Ell

答えて

0

コマンド:

G = matrix 

シンボルGにRの関数であるmatrixの値を代入します。明らかにではなく、のマトリックスです。正しい引数であるが与えられると、は "数値/複素数行列/ベクトル引数"となる関数です。行列の乗算が意味を成すかどうかをテストすると、エラーは%*%によってスローされます。関数で数値行列を掛けることはできません。あなたはGが効果的に行列関数となるG = matrix使用しましたので、あなたの関数で

+0

を作成していると呼ばれる全くデータフレームがないので、あなたのコードは、私たちに、一般的に役に立たない、エラーがまだ – user3179277

+0

を上げていることに注意してください十分なコンテキストを提供するには不十分です:どのような "変数"、どのようなコード? –

+0

関数の定義では、行列が最初に要求された変数です。変数としての "行列"の名前は、あなたが提案したようにプログラムに対してあいまいなので、変数名を "m"に変更しました。この行には 'G = m'と表示されますが、まだエラーが発生しています – user3179277

0

あなたは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(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 
>