Description Usage Arguments Details Value Author(s) See Also Examples
Wrapper for remotely called function supporting error dumps and remotely resolving arguments.
1 2 | sfRemoteWrapper(..., remoteFunArgs = list(), remoteFun = NULL,
remoteDumpfileBasename = NULL)
|
... |
Further arguments to remoteFun |
remoteFunArgs |
The Arguments to remoteFun. |
remoteFun |
The function to be called. Alternatively provided as an entry in remoteFunArgs. |
remoteDumpfileBasename |
The name of a dump on error. If null, no dump is created. Alternatively provided as an entry in remoteFunArgs. |
If remoteFunArgs is a name, it is first evaulated in the parent frame. This supports the usage of sfExport of the remoteFunArgs instead of passing much data in sfApply via ...
If remoteFun is NULL, then remoteFunArgs$remoteFun is used, and cleared from remoteFunArgs. If dumpFileBaseName is NULL, then remoteFunArgs$dumpFileBaseName is used, and cleared from remoteFunArgs.
If dumpFileBaseName is not null, a dump is created in this file when an error occurs. Trace the error then by
load(paste(remoteDumpfileBasename,".rda",sep="")); debugger(get(remoteDumpfileBasename))
mtrace(remoteFun); try( eval(body) )
result of calling remoteFun
Thomas Wutzler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #sfInit(parallel=TRUE,cpus=2)
#sfExport("sfRemoteWrapper",namespace="twSnowfall")
#--------- inspecting what went wrong in the remote process
suppressWarnings(dir.create("tmp")) # will store to tmp subdirectory
.remoteDumpfileBasename=file.path("tmp","testDump2")
.remoteDumpfile <- paste(.remoteDumpfileBasename,".rda",sep="")
unlink(.remoteDumpfile)
# throwing an error on remote process
fTestStop <- function(){ stop("test throwing an error") }
tmp <- try( sfClusterCall( sfRemoteWrapper, remoteFun=fTestStop, remoteDumpfileBasename=.remoteDumpfileBasename ) )
.tmp.f <- function(){
# inspecting what was wrong in interactive R-session
load(.remoteDumpfile)
debugger(get(.remoteDumpfileBasename))
# choose last step (18)
require(debug)
mtrace(remoteFun)
do.call(remoteFun, c(remoteFunArgs, list(...)))
}
#--------- exporting variables and passing arguments by name
fReturnArgs <- function(...){ list(...) } #returns the calling arguments
fArgs <- list(bla="fasel")
sfExport("fArgs")
res <- sfClusterCall( sfRemoteWrapper, remoteFun=fReturnArgs, remoteFunArgs=substitute(fArgs) )
identical( list(bla="fasel"), res[[1]] )
#--------- passing remoteFun and/or DumpfileBasename as part of remoteFunArgs
fArgs <- list(bla="fasel",remoteFun=fReturnArgs, remoteDumpfileBasename=.remoteDumpfileBasename )
sfExport("fArgs")
#mtrace(sfRemoteWrapper)
res <- sfClusterCall( sfRemoteWrapper, remoteFunArgs=substitute(fArgs) )
identical( list(bla="fasel"), res[[1]] )
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.