2017-07-05 4 views
0

2つの行列M1とM2を使ってネストされたforループがあり、出力時に必要な出力を得ることができました。私の出力を得るために 'y'というforループの中に別の変数を割り当てたので、最終的な出力をどのようにして行列に保存できるかわかりません。これらは私が先行出力変数を定義し、それに割り当てしようとした私のコード、R:ネストされたforループの割り当てられた変数の出力を行列として保存します。

A<-c('a','a','a','b','b','b','c','c','c') 
B<-c('a','b','c','a','b','c','a','b','c') 
C<-c(0,1,2,1,0,3,2,3,0) 
D<-data.frame(A,B,C) 

library("reshape2") 
M1<-acast(D, list(names(D)[1], names(D)[2])) 
M2<-matrix(c(1000,800,500),nrow=3,ncol=1) 

    for(i in 1:3) 
    { 
    for(j in 1:3) 
    { 
    y=0 
    for(k in 1:3) 
    { 
     if(M1[i,k]<M1[i,j]) 
     { 
     y=y+M2[k,1] 
     } 
    } 

    y=y-M2[i,1] 
     if(y<0) 
     { 
     print(0) 
     } 
     else 
     print(y) 
    } 
    } 

です。

output<-matrix(0,9,1) 

    for(i in 1:3) 
    { 
    for(j in 1:3) 
    { 
    y=0 
    for(k in 1:3) 
    { 
     if(M1[i,k]<M1[i,j]) 
     { 
     y=y+M2[k,1] 
     } 
    } 

    y=y-M2[i,1] 
     if(y<0) 
     { 
     print(0) 
     } 
     else 
     output[y]<-y 
    } 
    } 

    output 

このように割り当てると、複数のNA値、ゼロ、出力値の一部が得られます。

私はforループを新しくしました。どんな助けも高く評価されます。ありがとう!

+1

によってたかった行列を取得することができました。 M3を計算し(M1とM2から)、印刷M3の化粧品に対処します。私はM3を印刷する方法を尋ねる新しいSOの質問を開始します。私が物事を理解するにつれて、*どのように* M3が計算されたかは本当に問題ではなく、問題とその説明を混乱させる。 – wibeasley

答えて

0

私は私がのためのループがはるかにやろうとしていると考え、以下のコード

output<-matrix(0,9,1) 

for(i in 1:3) 
{ 
for(j in 1:3) 
{ 
    y=0 
    for(k in 1:3) 
    { 
    if(M1[i,k]<M1[i,j]) 
    { 
    y=y+M2[k,1] 
    } 
    } 

    y=y-M2[i,1] 
    if(y<0) 
    { 
    output[j+(3*(i-1)),1]<-0 
    } 
    else 
    output[j+(3*(i-1)),1]<-y 
    } 
} 

View(output) 
関連する問題