2016-08-17 4 views
-1

私は癌患者のシミュレーションを行い、モデルに新しい問題があります。 行列を満たし、常に同じエラーメッセージを取得しようとしているとき:がんモデルでは、ループで行列を埋めるとエラーメッセージ "TRUE/FALSEが必要なところに値がありません"が返されます

「エラー場合に(m.Results [I、T - 1] == "o.SURV_NC"){: 欠落値場合TRUE/FALSEに必要な」

私の目標は、前のセルにすでにあった場合、その列2がo.DEADとして設定されますでは

n.i<-5 
n.t<-10 

m.Results <- matrix(nrow = n.i, ncol = n.t) 

m.Results[1, 1] = "o.SURV_NC" 

m.Results[2, 1] = "o.SURV_NC" 

m.Results[3, 1] = "o.DEAD" 

m.Results[4, 1] = "o.DEAD" 

m.Results[5, 1] = "o.DEAD" 

for (t in 2:n.t) {  
    for (i in 1:n.i) { 


    if (m.Results[i, t - 1] == "o.SURV_NC") { 
     m.Results[i, t] = "o.SURV_NC" 
    } 
    } 
} 

興味深いことに、エラーメッセージがあれば最初の塗りつぶしを消え

例をo.DEAD行列全体が数字で表されます。

n.i<-5 
n.t<-10 

m.Results <- matrix(9, nrow = n.i, ncol = n.t) 

m.Results[1, 1] = "o.SURV_NC" 

m.Results[2, 1] = "o.SURV_NC" 

m.Results[3, 1] = "o.DEAD" 

m.Results[4, 1] = "o.DEAD" 

m.Results[5, 1] = "o.DEAD" 

for (t in 2:n.t) { #open loop for columns 
    for (i in 1:n.i) { #open loop for rows 
    #  
    #PREVIOUSLY DEAD PATIENTS 
    if (m.Results[i, t - 1] == "o.SURV_NC") { 
     m.Results[i, t] = "o.SURV_NC" 
    } 
    } 
} 

はどんなアドバイス

+0

あなたは 'm.Results <行う可能性 - (「」、nrow = NI、NcoI部位= NT)'代わりに行列を – rawr

+0

よく9は問題ではありませんが、実際には、最初の列のセルがすでにo.DEADだった場合、2番目の列のセルがo.DEADに設定されます。 – fank

+0

9が実際に問題です。あなたの例では、NAの行列で始まり、NAを別の値と比較すると常にNAになります。 9または ''''を使用する理由は、9または '' 'を別の値(つまり、 '' o.SURV_NC "')と比較しているためです。 – Noah

答えて

0

あなたドンのためにあなたをとても感謝:しかし「o.DEADは」想定さ

例(なしエラーメッセージが、間違ったfunciton)として2番目の列に置かれていません「tはm.Results[i, t - 1] == "o.SURV_NC"FALSEときのための代替を与えるので、あなたは常にNAある、NA"o.SURV_NC"を比較してしまう(すなわち、ないTRUEまたはFALSE)、およびifTRUEまたはが必要です。これを回避するにはいくつかの方法があります。

あなたif文は、彼らがあなたのマトリックスにあるように、これはNA Sを残す

if (isTRUE(m.Results[i, t - 1] == "o.SURV_NC")) 

を読み込みますので、あなたは、isTRUE()を使用することができます。前の列が"o.SURV_NC"でない場合、または、あなたは何か他の行列値を記入することができます

if (m.Results[i, t - 1] == "o.SURV_NC") { 
    m.Results[i, t] = "o.SURV_NC" 
} 
else m.Results[i, t] = "o.DEAD" 
関連する問題