[R] snowfall
Santosh Srinivas
santosh.srinivas at gmail.com
Wed Jan 12 09:47:12 CET 2011
Hello,
Just wondering why I am unable to run this in parallel.
A dput of my dataset is attached at the end. Please use to create my data
object.
I want to run this function in parallel (not sure if this is an efficient
implementation):
#Function to calculate the time to maturity for the option
require(fCalendar,quietly=TRUE) #Trying to calculate the trading days
require(fractalrock,quietly=TRUE) #Just to calculate the trading days
myFinCenter="Asia/Singapore"
getTimeToMaturity <- function(x){
tryCatch({
toDt <- as.Date(as.character(x['EXPIRY_DT']), "%Y-%m-%d")
#Expiry Date
fromDt <- as.Date(as.character(x['TIMESTAMP']), "%Y-%m-%d")
#Trade Timestamp
NoOfDays <- NROW(getTradingDates(toDt,fromDt))
return(NoOfDays/252)
},
error = function (ex){
#print (paste("Error in",toDt,fromDt))
NoOfDays <- 0
return(NoOfDays/252)
}
)
}
Question: The following two lines work but the third and parallel one
doesn't ... why?
1) > apply(dNiftyOpt,1,getTimeToMaturity) #Works
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20
0.02380952 0.01984127 0.07936508 0.02380952 0.01984127 0.01190476 0.02777778
0.02380952 0.01984127 0.01190476 0.02380952 0.01984127 0.02380952 0.02380952
0.01984127 0.02380952 0.01984127 0.02380952 0.02380952 0.02777778
library(snowfall)
2) > sfInit()
snowfall 1.84 initialized: sequential execution, one CPU.
> sfApply(dNiftyOpt,1,getTimeToMaturity) #Works
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20
0.02380952 0.01984127 0.07936508 0.02380952 0.01984127 0.01190476 0.02777778
0.02380952 0.01984127 0.01190476 0.02380952 0.01984127 0.02380952 0.02380952
0.01984127 0.02380952 0.01984127 0.02380952 0.02380952 0.02777778
> sfStop()
DOESN'T WORK: 3)
> sfInit( parallel=TRUE, cpus=4 );
> sfApply(dNiftyOpt,1,getTimeToMaturity) #Added the time to maturity.
DOESN'T WORK?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
> sfStop();
My dataset:
dput(dNiftyOpt)
structure(list(INSTRUMENT = c("OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX",
"OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX",
"OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX", "OPTIDX",
"OPTIDX", "OPTIDX"), SYMBOL = c("NIFTY", "NIFTY", "NIFTY", "NIFTY",
"NIFTY", "NIFTY", "NIFTY", "NIFTY", "NIFTY", "NIFTY", "NIFTY",
"NIFTY", "NIFTY", "NIFTY", "NIFTY", "NIFTY", "NIFTY", "NIFTY",
"NIFTY", "NIFTY"), EXPIRY_DT = c("2004-01-29", "2004-01-29",
"2004-01-29", "2004-01-29", "2004-01-29", "2004-01-29", "2004-01-29",
"2004-01-29", "2004-01-29", "2004-01-29", "2004-01-29", "2004-01-29",
"2004-01-29", "2004-01-29", "2004-01-29", "2004-01-29", "2004-01-29",
"2004-01-29", "2004-01-29", "2004-01-29"), STRIKE_PR = c(1780,
1780, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1820, 1820,
1820, 1830, 1830, 1830, 1830, 1840, 1840, 1850), OPTION_TYP = c("PE",
"PE", "CE", "CE", "CE", "CE", "PE", "PE", "PE", "PE", "CE", "CE",
"PE", "CE", "CE", "PE", "PE", "CE", "PE", "CE"), SETTLE_PR = c(27.4,
5.7, 152.95, 28.6, 70.45, 111.35, 14.75, 39.2, 8.6, 2.35, 20.4,
54.2, 50.15, 18.35, 47.25, 51.75, 15.5, 14.95, 57.95, 26.3),
TIMESTAMP = c("2004-01-22", "2004-01-23", "2004-01-02", "2004-01-22",
"2004-01-23", "2004-01-27", "2004-01-21", "2004-01-22", "2004-01-23",
"2004-01-27", "2004-01-22", "2004-01-23", "2004-01-22", "2004-01-22",
"2004-01-23", "2004-01-22", "2004-01-23", "2004-01-22", "2004-01-22",
"2004-01-21"), Underlying = c(1770.5, 1847.55, 1946.05, 1770.5,
1847.55, 1904.7, 1824.6, 1770.5, 1847.55, 1904.7, 1770.5,
1847.55, 1770.5, 1770.5, 1847.55, 1770.5, 1847.55, 1770.5,
1770.5, 1824.6), UnderlyingVol = c(0.293906144944403, 0.331877179605752,
0.129552369208600, 0.293906144944403, 0.331877179605752,
0.348918971622834, 0.276334860399362, 0.293906144944403,
0.331877179605752, 0.348918971622834, 0.293906144944403,
0.331877179605752, 0.293906144944403, 0.293906144944403,
0.331877179605752, 0.293906144944403, 0.331877179605752,
0.293906144944403, 0.293906144944403, 0.276334860399362)), .Names =
c("INSTRUMENT",
"SYMBOL", "EXPIRY_DT", "STRIKE_PR", "OPTION_TYP", "SETTLE_PR",
"TIMESTAMP", "Underlying", "UnderlyingVol"), row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17", "18", "19", "20"), class = "data.frame")
More information about the R-help
mailing list