[R] How to vectorize this function

Lynette Chang momtoom@x @ending from gm@il@com
Thu Sep 20 17:08:30 CEST 2018


Hello everyone,

     I’ve a function with five input argument and one output number. 
	  impVolC <- function(callM, K, T, F, r)

     I hope this function can take five vectors as input, then return one vector as output. My vectorization ran into problems with the nested if-else operation. As a result, I have to write another for loop to call this function. Can anyone suggest some methods to overcome it? I put my code below, thanks.

impVolC <- function(callM, K, T, F, r){


 if(y >= 0){
     call0 <- K*exp(-r*T)*(exp(y)*polya(sqrt(2*y)) - 0.5)
     if(callM <= call0){
       sig <- 1/sqrt(T)*(sqrt(gamma + y) - sqrt(gamma - y))
     }else{
       sig <- 1/sqrt(T)*(sqrt(gamma + y) + sqrt(gamma - y))
     }
 }else{
     call0 <- K*exp(-r*T)*(exp(y)/2 - polya(-sqrt(-2*y)))
     if(callM <= call0){
       sig <- 1/sqrt(T)*(-sqrt(gamma + y) + sqrt(gamma - y))
     }else{
       sig <- 1/sqrt(T)*(sqrt(gamma + y) + sqrt(gamma - y))
     }
 }
 sig
} 

for(i in 1:length(call)){
 sigV[i] <- impVolC(callM = call[i], K = df$Strike[i], T = T, F = F, r = r_m)  
}



More information about the R-help mailing list