Dear R helpers I have following csv file which is an input id par_value coupon_rate frequency_coupon tenure ytm 1 1000 10 1 5 12 # Here frequency_coupon is coded s.t. 0 means Daily compounding, 1 means monthly compouding, 2 means Quarterly, 3 means Half yearly and 4 means only once. Thus in the case the frequency_coupon = 1 means, total number of times compounding is done = 12. My R Code for calcualting Macaulay Duration is as follows - ## INPUT ONS = read.csv('instrument details..csv') par_value = ONS$par_value coupon = ONS$coupon_rate*par_value/100 freq_coupon = ONS$frequency_copoun tenure = ONS$tenure ytm = ONS$ytm # _________________________________________________________________________________________________ ## COMPUTATIONS macaulay_duration = NULL modified_duration = NULL freq_coupon_new = NULL if(freq_coupon <= 0) { freq_coupon_new = 365 } if(freq_coupon > 0 & freq_coupon <= 1) { freq_coupon_new = 12 } if(freq_coupon > 1 & freq_coupon <= 2) { freq_coupon_new = 4 } if(freq_coupon > 2 & freq_coupon <= 3) { freq_coupon_new = 2 } if(freq_coupon > 3 & freq_coupon <= 4) { freq_coupon_new = 1 } ## COMPUTATIONS terms_coupon_payment = (seq(1/freq_coupon_new, tenure, by = 1/freq_coupon_new))*freq_coupon_new coupon_amount = coupon/(freq_coupon_new) cash_flow1 = rep(c(coupon_amount), (tenure*freq_coupon_new - 1)) cash_flow2 = par_value + coupon_amount cash_flow = c(cash_flow1, cash_flow2) ytm_effective = ((1+ytm/100)^(1/freq_coupon_new))-1 pv = NULL for (i in 1:(tenure*freq_coupon_new)) { pv[i] = cash_flow[i] / ((1+ytm_effective)^terms_coupon_payment[i]) } macaulay_duration = sum(pv*terms_coupon_payment)/sum(pv) modified_duration = macaulay_duration / (1+(ytm_effective)/freq_coupon_new) macaulay_duration modified_duration ## _____________________________________________________________________ # My PROBLEM Here I am dealing with only one id i.e. only one record. However, if Instead of one record, ahve say 20 records, how do I calculate the Macaulay Duration for each of these 20 records. One option is to run this code 20 times *which I guess will be foolish thing to do. Other method is to define above code as some function and tehn run this function for each of these records, but I don't underatnd how to write a function and thord option is to treat the input of these 20 records in a matrix form, which I had tried unsuccessfully. Please guide me as to how do I modify the R-code to calculate Mac duration for each of tehse records and store tehm. Regards Madhavi Bhave The INTERNET now has a personality. YOURS! See your Yahoo! Homepage. [[alternative HTML version deleted]]