這個問題是一個跟進到以前的問題:min value(greater than 0) from column combined with row operation使用價值在應用
從本質上講,我需要從歧矩陣(同一行/列)中的值,以傳遞作爲參數適用的自治功能。
我的代碼是
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
我需要在值102.34通過爲第2列到函數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
}
}
}
+1!說得好!高興地發現部分排序選項! – agstudy 2013-02-18 09:40:27
這太好了。我很感激你留下一些點給我練習。 – mrkb80 2013-02-18 18:35:58