私はMatlabに翻訳しているこのコードを見ています.Rで実行中のバージョンではなく、ソースコードしかありません.
Result[,1:2]<-diag(max)
max は [2*1] 配列です。
これは、結果の最初の 4 つの要素に割り当てられた rhs に対角行列を作成していると想定していました。
ただし、左辺の対角要素のみを変更する必要があると思います(右辺の最大値に)。これはコードの正しい読み取りですか?
このコードは割り当てられません。要素ごとに matrix を比較するだけです。寸法が正しい場合にのみ機能します。ここに例があります:
set.seed(1234)
Result <- matrix(rnorm(20),nrow=2)
Result[,1:2] <= diag(max(c(2,2)))
[,1] [,2]
[1,] TRUE FALSE
[2,] FALSE TRUE
エラーが発生する例(最も可能性の高いケース)
Result[,1:2] <= diag(max(c(2,4)))
Error in Result[, 1:2] <= diag(max(c(2, 4))) : non-conformable arrays
OP編集後の編集
元のコードが
Result[,1:2] <- diag(max(c(2,2)))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0.4291247 -0.5747400 -0.5644520
[2,] 0 1 0.5060559 -0.5466319 -0.8900378
上記のように、コードは対角行列 (4 番目の要素) を割り当てますが、正しい次元がない場合、これは機能しません。例:
Result <- matrix(rnorm(6),nrow=3)
Result[,1:2] <- diag(max(c(2,2)))
Error in Result[, 1:2] <- diag(max(c(2, 2))) :
number of items to replace is not a multiple of replacement length
結果には RHS よりも多くの行があるため、エラーが発生しました。
Result
[,1] [,2]
[1,] -1.2070657 -2.3456977
[2,] 0.2774292 0.4291247
[3,] 1.0844412 0.5060559
RHSは
diag(max(c(2,2)))
[,1] [,2]
[1,] 1 0
[2,] 0 1