2012-02-10 90 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 

所以現在我想每一行中的元素傳遞給函數。我已經嘗試使用適用於:

apply(b,1,nDone) 

並得到以下錯誤:

Error in under/strike : 'strike' is missing 

我也試過:

lapply(b,nDone) 

我得到以下錯誤:

Error in under/strike : 'strike' is missing 

我想要的是該函數的多個結果。我在這裏做錯了什麼?

+0

嗯....這是完全一樣的[最後](http://stackoverflow.com/questions/9235781/passing-arguments-to-a-function-in-a-single-vector)的問題。 – joran 2012-02-10 23:33:57

+0

嗨喬蘭,我知道它看起來是一樣的,我當然不會浪費任何人的時間。在這個問題現在我試圖將矩陣的每一行傳遞給一個函數。再次感謝您的評論。 – user1181337 2012-02-10 23:43:37

+0

是的。 @ joran對上一個問題的回答(實際上是一個評論)也應該能夠回答這個問題。他留下了一點空間來進行鬥爭/解釋。我建議你看看他的評論,看看你是否可以理解如何處理它,然後(如果你不能)回來並要求澄清那裏... – 2012-02-10 23:59:52

回答

6

這應該工作:

apply(b, 1, function(x)do.call(nDone, as.list(x))) 

有什麼錯你的版本是,通過應用(),您的nDone()函數獲取全行作爲一個參數,即向量下通過了「罷工「,而對其他論點則毫無用處。解決方法是使用do.call()。

+0

感謝Flodel!並感謝所有發佈的人! – user1181337 2012-02-11 06:59:44

3

值得一提的是,如果你想要的功能,結果綁定到原來的矩陣,你可以使用mdplyplyr

> 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