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")
You forgot to load the required packages on the client nodes by sfLibrary(fCalendar) sfLibrary(fractalrock) and you really should not tryCatch without evaluating the errors for yourself. Best wishes, Uwe Ligges On 12.01.2011 09:47, Santosh Srinivas wrote:> 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") > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Apparently Analagous Threads
- [Bug 3206] New: sftp client(32bit) chown command does not support uid >LONG_MAX
- [patch] hard link protocol extension for sftp
- Using Metafor package: how to backtransform model coefficients when Freeman Tukey double arcine transformation is used
- test proportion
- Reading a large netCDF file using R