マトリックスの列から最小値 (0 より大きい) を取得しようとしています。次に、その最小値が発生した行番号を使用して、最小行 (識別された) の下のすべての行に (式として) 適用される値を計算します。以前)。
例を挙げて説明しましょう: x を次のように定義すると:
x<-rbind(c(0, 0, 0), c(0,0,3), c(0,3,5))
それx
は次のとおりです。
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 3
[3,] 0 3 5
次に、列 1 には最小値がなく、列 2 にはインデックス 3 に最小値があり、列 3 にはインデックス 2 に最小値があることを確認したいと思います。
そこで、最小値のベクトルを作成する次の試みを作成しました。
min<-apply(x,2,function (v) min(which(v>0), na.rm = TRUE))
これは私に警告を与えます:
Warning message:
In min(which(v > 0), na.rm = TRUE) :
no non-missing arguments to min; returning Inf
(問題 1): 回避方法がわかりません。
(問題 2): 最小値 (存在する場合) の結果を取得し、ベクトル min の値に基づいて関数の値を計算し、ベクトル min のインデックスを使用して値を選択する必要があります。別のマトリックスからst
これは、ループに頼らずに少し遊んでみましたが、どうすればよいかわかりません。
例に戻ると、 の最初の値min
はInf
であるため、ベクトルcalc.results
は 0 になり、 の次の値min
は 3 になるため、行列からst
2 列目 (3) の 3 行目を選択し、この値を使用して計算しますなどの 2 番目の列の結果calc.results
。操作が完了calc.results
すると、次のようになります (たとえば、単純化すると、 からの値は何も実行されませんst
)。
[1] 0 3 3
次に、(の列に等しい のインデックスを使用して) で識別した行に到達した後でのみ、 の値を差し引いcalc.results
て行列に戻す必要があります。他のすべての行は変更されません。st
calc.results
min
min
st
この例では、最終結果は次のようになります。
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 2
2 列目の値は 3 であり、2 列目の 3min
の値は、 2 列目で行 3 のみで 3 が減算されているためです (実際、列がゼロになるのは次の積です)。この例であり、一般的には当てはまりません)。calc.results
st