向量输入输出r

我一直在研究并尝试了很多不同的东西,并且在尝试使此函数为程序的X,td,D0获取向量输入方面一直未能成功。最终我想知道当罢工,除息和派息金额各不相同时,期权的价值如何变化,而不是同一时间,而是一次一个。这是对于离散股利我不考虑收益率。这是我的第一个真正的程序,并且一直只使用r作为计算器,所以我不仅仅是在耳朵后面湿透,而是从头到脚滴水。我真的很感激任何帮助。向量输入输出r

DivADJBSM<-function(S, X, rf, T,td, sigma,D0) { 

values <- matrix(,3,2)

Dd<-(D0*exp(-rf*T)) #discounted dividend#

Sd<-(S-Dd) #Stock adjusted for present value of dividends#

Xd1=(X-D0) #Strike adjusted after dividend paid#

K=td/T #dividend payment to terminal date impact#

SigA=(sigma*S)/(Sd) #adjusted volatility full#

WSig=(sigma*S)/(S-(Dd*K)) #volatility adjustment impact of payment date#

d1 <- (log(Sd/Xd1)+(rf*T))/(SigA*sqrt(T)) +((SigA*sqrt(T))/2)

d2 <- d1 - (SigA * sqrt(T))

d3 <- (log(Sd/Xd1)+(rf*T))/(WSig*sqrt(T)) +((WSig*sqrt(T))/2)

d4 <- d3 - (WSig * sqrt(T))

d5 <- (log(S/X)+(rf*T))/(sigma*sqrt(T)) +((sigma*sqrt(T))/2)

d6 <- d5 - (sigma * sqrt(T))

values[1] <- (Sd)*pnorm(d1) - (Xd1)*exp(-rf*T)*pnorm(d2)

values[4] <- (Xd1)*exp(-rf*T)*pnorm(-d2)-(Sd)*pnorm(-d1)

values[2] <- (Sd)*pnorm(d3) - (Xd1)*exp(-rf*T)*pnorm(d4)

values[5] <- (Xd1)*exp(-rf*T)*pnorm(-d4)-(Sd)*pnorm(-d3)

values[3] <- (S)*pnorm(d5) - (X)*exp(-rf*T)*pnorm(d6)

values[6] <- (X)*exp(-rf*T)*pnorm(-d6)-(S)*pnorm(-d5)

print("Calls COL=1, Puts COL=2, Full Vol ADJ ROW=1, Weighted Vol ROW=2, Std BSM ROW=3")

values

}

回答:

你可以用lapply完成你想要的。这里有一个简单的例子:

> fun<-function(x) x^2 

> lapply(1:3,fun)

[[1]]

[1] 1

[[2]]

[1] 4

[[3]]

[1] 9

如果你有多个参数,则默认情况下它遍历第一个参数,但你可以通过在lapply结束命名的剩余参数指定哪些人会遍历拨打:

> fun<-function(x,y,z) c(x,y^2,z^3) 

> lapply(1:3,fun,2,3)

[[1]]

[1] 1 4 27

[[2]]

[1] 2 4 27

[[3]]

[1] 3 4 27

> lapply(1:3,fun,x=2,z=3)

[[1]]

[1] 2 1 27

[[2]]

[1] 2 4 27

[[3]]

[1] 2 9 27

> lapply(1:3,fun,x=2,y=3)

[[1]]

[1] 2 9 1

[[2]]

[1] 2 9 8

[[3]]

[1] 2 9 27

为了与你的函数中使用此,你将不得不重新命名X说法,因为X也是一个参数来lapply,这会搞乱了。

以上是 向量输入输出r 的全部内容, 来源链接: utcz.com/qa/265734.html

回到顶部