私は2つの行列を持っています
A
2 1 0
0 1 6
1 0 0
B
1 1 3
4 2 8
2 0 1
次の基準を満たす A と B を比較する要素を見つけたい:
if A[i,j] =0 and B[i,j]>0
だから私の結果行列は
C
0 0 3
4 0 0
0 0 1
を除いてこれを行う適切な方法は何for loop
ですか?
通常の論理演算子と算術演算子は、R の行列に対して要素ごとに機能し%*%
ます。行列の乗算を行うのは、クロネッカー演算子とクロネッカー演算子だけです。さらに、"[" および "[<-" 関数を使用して行列にインデックスを付けることができます。
> C <- B
> C[!( A==0 & B >0) ] <- 0
> C
[,1] [,2] [,3]
[1,] 0 0 3
[2,] 4 0 0
[3,] 0 0 1
行列で単純な比較演算子を使用します。
以下を使用して、データを再作成します。
A <- as.matrix(read.table(text="
2 1 0
0 1 6
1 0 0"))
B <- as.matrix(read.table(text="
1 1 3
4 2 8
2 0 1"))
比較を実行します。
A==0 & B>0
V1 V2 V3
[1,] FALSE FALSE TRUE
[2,] TRUE FALSE FALSE
[3,] FALSE FALSE TRUE
そして、次を使用しますifelse
。
ifelse(A==0 & B>0, B, 0)
V1 V2 V3
[1,] 0 0 3
[2,] 4 0 0
[3,] 0 0 1