Create a task based on an expression. The expression passed as
expr
will typically be a function call (e.g., f(x)
). We will
analyse the expression and find all variables that you reference
(in the case of f(x)
this is x
) and combine this with the
function name to run on the worker. If x
cannot be found in
your calling environment we will error.
rrq_task_create_expr(
expr,
queue = NULL,
separate_process = FALSE,
timeout_task_run = NULL,
depends_on = NULL,
controller = NULL
)
The expression, does not need quoting. See Details.
The queue to add the task to; if not specified the "default" queue (which all workers listen to) will be used. If you have configured workers to listen to more than one queue you can specify that here. Be warned that if you push jobs onto a queue with no worker, it will queue forever.
Logical, indicating if the task should be
run in a separate process on the worker. If TRUE
, then the
worker runs the task in a separate process using the callr
package. This means that the worker environment is completely
clean, subsequent runs are not affected by preceding ones. The
downside of this approach is a considerable overhead in starting
the external process and transferring data back.
Optionally, a maximum allowed running
time, in seconds. This parameter only has an effect if
separate_process
is TRUE
. If given, then if the task takes
longer than this time it will be stopped and the task status set
to TIMEOUT
.
Vector or list of IDs of tasks which must have completed before this job can be run. Once all dependent tasks have been successfully run, this task will get added to the queue. If the dependent task fails then this task will be removed from the queue.
The controller to use. If not given (or NULL
)
we'll use the controller registered with
rrq_default_controller_set()
.
Alternatively you may provide a multiline statement by using {}
to surround multiple lines, such as:
in this case, we apply a simple heuristic to work out that x
is
locally assigned and should not be saved with the expression.