この質問は、前の質問のフォローアップです:行操作と組み合わせた列からの最小値(0より大きい)
基本的に、異なる行列 (同じ行/列) の値を使用して、apply の無名関数のパラメーターとして渡す必要があります。
私のコードは
apply(dv, 2, function(y) { y[y>0] <- (y[y>0] -
blacksch(min(
ifelse(any(y>0), y[y>0], 0)),k,sigma,r,
(min(ifelse(any(y>0), (which(y>0)/steps) *t ,0))))
);
y })
これは異なるマトリックスからのものであるmin(
ifelse(any(y>0), y[y>0], 0))
必要がありますがst
、dv の値とまったく同じ場所 (行/列単位) にある必要があります。
例として、次の 2 つの行列 dv と st を使用できます。
> dv
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 3
[3,] 0 3 5
> st
[,1] [,2] [,3]
[1,] 100 100.00 100.00
[2,] 100 100.00 102.95
[3,] 100 102.34 104.88
列 2 の値 102.34 を関数の最初のパラメーターに渡す必要がありますblacksch
(これは、行列の列 2 の 0 より大きい最小値と同じ位置に対応するため)dv
だから私はこれが正しくないことを知っていますが、次のようなものです:
apply(dv, 2, function(y) { y[y>0] <- (y[y>0] -
blacksch(st[minimum position of value greater than 0 in dv for each column],k,sigma,r,
(min(ifelse(any(y>0), (which(y>0)/steps) *t ,0))))
);
y })
からの最小値だけでなくst
、「現在の」値も必要であることにも言及する必要があると思います(これをループで記述する場合は、ネストされた for ループに似たようなことを行います)
私の解決策は、実際には R の方法ではありません (したがって、パフォーマンスが低下します)。
for(j in 1:paths)
{
minrow=0
for(i in 1:steps)
{
if (dv[i,j]>0 && minrow==0)
{
minrow=i
bsminrow=blacksch(st[i,j],k,sigma,r, i/steps * t)
}
else if (minrow!=0)
{
dv[i,j]=blacksch(st[i,j],k,sigma,r,i/steps* t ) - bsminrow
}
}
}