2012-02-10 13 views
0

私はこの関数を作成:渡す引数

nDone<- function (under,strike,ttoe,vol,rf,dy) { 
    return(pnorm(((log(under/strike) + (rf-dy+(vol^2)/2)*ttoe)/(vol*(ttoe^0.5))))) 
} 

nDone(90,100,3,0.17,0.05,0) 
[1] 0.6174643 

はこれまでのところ、それは罰金だと動作します。今は、関数を行列の各行に適用する必要があります。

b<- c(90,95,100,100,3,2,0.17,0.18,0.05,0.05,0,0) 
dim(b) <- c(2,6) 

います:

 [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 90 100 3 0.17 0.05 0 
[2,] 95 100 2 0.18 0.05 0 

をだから今、私は関数に、各行の要素を通過したいです。私も試してみた

Error in under/strike : 'strike' is missing 

lapply(b,nDone) 

私は次のエラーを取得する:

Error in under/strike : 'strike' is missing 

apply(b,1,nDone) 

そして、次のエラーを取得する:私は適用使ってみました

私が望むのは、この関数の複数の結果です。私はここで間違って何をしていますか?

+0

からmdplyを使用することができ、ことを言及する価値があります最後](http://stackoverflow.com/questions/9235781/passing-arguments-to-a-function-in-a-single-vector)質問。 – joran

+0

こんにちはジョラン、私はそれが同じように見えると私は確かに誰の時間を無駄にしようとしていない。この質問では、行列の各行を関数に渡そうとしています。繰り返していただきありがとうございます。 – user1181337

+0

はい。前の質問に対する@ジョランの答え(実際にはコメント)も同様に答えるために働くはずです。彼はあなたの苦闘/解釈のために少し余裕を残しました。私はあなたが彼のコメントを見て、あなたがそれで何をするべきかを理解できるかどうかを見てみることをお勧めします。もしあなたが戻って来て、そこに明確化を求めるなら... –

答えて

6

これは動作するはずです:

バージョンと間違っていた何
apply(b, 1, function(x)do.call(nDone, as.list(x))) 

スルー()適用されることで、あなたのnDone()関数は "、すなわち、1つの引数として下を通過したベクトルを行全体を得ていましたストライク "と他の議論には何もない。解決策は、do.call()を使用することです。

+0

ありがとうFlodel!投稿したすべての人に感謝します! – user1181337

3

あの....これはあなたの[とまったく同じであるあなたは、元の行列に関数の結果をバインドしたい場合、あなたはplyr

> library(plyr) 
> mdply(b, nDone) 

    X1 X2 X3 X4 X5 X6  V1 
1 90 100 3 0.17 0.05 0 0.6174643 
2 95 100 2 0.18 0.05 0 0.6249916