Compiles an RSP document and returns the generated source code script.

# S3 method for default
rcode(..., file=NULL, path=NULL, output=NULL, workdir=NULL, envir=parent.frame(),
  args="*", verbose=FALSE)

Arguments

...

character strings with RSP markup.

file, path

Alternatively, a file, a URL or a connection from with the strings are read. If a file, the path is prepended to the file, iff given.

output

A character string or a connection specifying where output should be directed. The default is a file with a filename where the file extension(s) (typically ".*.rsp") has been replaced by ".R" in the directory given by the workdir argument.

workdir

The working directory to use after parsing and preprocessing. If argument output specifies an absolute pathname, then the directory of output is used, otherwise the current directory is used.

envir

The environment in which the RSP string is preprocessed and evaluated.

args

A named list of arguments assigned to the environment in which the RSP string is parsed and evaluated. See cmdArgs.

verbose

See Verbose.

Value

Returns an RspFileProduct if possible, otherwise an RspSourceCode.

Author

Henrik Bengtsson

See also

rcat() and rfile().

Examples

# RSP-embedded text to an R script
code <- rcode("Current time is <%=Sys.time()%>\n")
cat(code, sep="\n")
#> ## = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
#> ## This is a self-contained R script generated from an RSP document.
#> ## It may be evaluated using source() as is.
#> ## = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
#> 
#> ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#> ## Local RSP utility functions
#> ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#> ## RSP metadata function
#> .rmeta <- list(
#> )
#> 
#> rmeta <- function(...) {
#>   args <- list(...)
#>   if (length(args) == 0) return(.rmeta)
#>   names <- names(args)
#>   if (length(names) > 0) {
#>     for (name in names) .rmeta[[name]] <<- args[[name]]
#>   } else {
#>     names <- unlist(args, use.names=FALSE)
#>     if (length(names) == 1) .rmeta[[names]] else .rmeta[names]
#>   }
#> }
#> 
#> ## Look up 'base' function once (faster)
#> if (getRversion() < "2.15.0") {
#>   .base_paste <- base::paste
#>   .base_paste0 <- function(...) .base_paste(..., sep="")
#> } else {
#>   .base_paste0 <- base::paste0
#> }
#> .base_cat <- base::cat
#> 
#> ## RSP output function
#> .rout <- function(x) .base_cat(.base_paste0(x))
#> 
#> ## RSP output function for inline RSP constructs
#> .rout0 <- function(x) .base_cat(rpaste(x))
#> 
#> ## The output of inline RSP constructs is controlled by
#> ## generic function rpaste().
#> rpaste <- function(...) UseMethod("rpaste")
#> 
#> setInlineRsp <- function(class, fun, envir=parent.frame()) {
#>   name <- sprintf("rpaste.%s", class)
#>   assign(name, fun, envir=envir)
#>   ## FIXME: How to register an S3 method at run-time? /HB 2018-04-06
#>   ## registerS3method("rpaste", class = class, method = name, envir = envir)
#> }
#> 
#> ## The default is to coerce to character and collapse without
#> ## a separator.  It is possible to override the default in an
#> ## RSP code expression.
#> setInlineRsp("default", function(x, ...) .base_paste0(x, collapse=""))
#> 
#> ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#> ## RSP source code script [BEGIN]
#> ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#> .rout("Current time is ")
#> .rout0(Sys.time())
#> .rout("\n")
#> ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#> ## RSP source code script [END]
#> ## - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# RSP-embedded text to a shell script
code <- rcode("Current time is <%=date%>\n", language="sh")
cat(code, sep="\n")
#> 
#> printf "Current time is "
#> printf "date"
#> printf "\n"
#>