这个问题是对上一个问题的跟进:min value(greater than 0) from column combined with row operation
本质上,我需要使用来自不同矩阵(相同行/列)的值作为参数传入 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 中的值位于完全相同的位置(行/列)。
例如,我可以有以下两个矩阵 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
}
}
}