我创建了这个函数:
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
Run Code Online (Sandbox Code Playgroud)
到目前为止,这很好并且有效.现在我想将函数应用于矩阵的每一行.
b<- c(90,95,100,100,3,2,0.17,0.18,0.05,0.05,0,0)
dim(b) <- c(2,6)
Run Code Online (Sandbox Code Playgroud)
这使:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 90 100 3 0.17 0.05 0
[2,] 95 100 2 0.18 0.05 0
Run Code Online (Sandbox Code Playgroud)
所以现在我想将每行中的元素传递给函数.我尝试过使用申请:
apply(b,1,nDone)
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
Error in under/strike : 'strike' is missing
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
lapply(b,nDone)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error in under/strike : 'strike' is missing
Run Code Online (Sandbox Code Playgroud)
我想要的是该功能的多个结果.我在这做错了什么?
这应该工作:
apply(b, 1, function(x)do.call(nDone, as.list(x)))
Run Code Online (Sandbox Code Playgroud)
你的版本出了什么问题,通过apply(),你的nDone()函数将整行作为一个参数,即在"strike"下传递的向量,而对于其他参数则没有.解决方案是使用do.call().