pub struct RCall {
fun: SEXP,
args: Vec<(Option<CString>, SEXP)>,
}Expand description
Builder for constructing and evaluating R function calls.
RCall constructs a LANGSXP (R language object) from a function name or
SEXP and a sequence of arguments (optionally named). It handles GC
protection during construction and evaluation.
§Example
use miniextendr_api::expression::RCall;
use miniextendr_api::sys;
unsafe {
// seq_len(10)
let result = RCall::new("seq_len")
.arg(SEXP::scalar_integer(10))
.eval_base()?;
// paste(x, collapse = ", ")
let result = RCall::new("paste")
.arg(some_sexp)
.named_arg("collapse", sys::Rf_mkString(c", ".as_ptr()))
.eval_base()?;
}Fields§
§fun: SEXPFunction symbol or SEXP.
args: Vec<(Option<CString>, SEXP)>Arguments as (optional_name, value) pairs.
Implementations§
Source§impl RCall
impl RCall
Sourcepub unsafe fn from_sexp(fun: SEXP) -> Self
pub unsafe fn from_sexp(fun: SEXP) -> Self
Start building a call with a function SEXP (closure, builtin, etc.).
§Safety
fun must be a valid SEXP representing a callable R object.
Sourcepub unsafe fn build(&self) -> SEXP
pub unsafe fn build(&self) -> SEXP
Build the LANGSXP without evaluating it.
The returned SEXP is unprotected. The caller must protect it if further allocations will occur before use.
§Safety
Must be called from the R main thread. All argument SEXPs must still be valid (protected or otherwise reachable by R’s GC).
Sourcepub unsafe fn eval(&self, env: SEXP) -> Result<SEXP, String>
pub unsafe fn eval(&self, env: SEXP) -> Result<SEXP, String>
Evaluate the call in the given environment.
Uses R_tryEvalSilent so that R errors are captured as Err(String)
rather than causing a longjmp through Rust frames.
§Safety
- Must be called from the R main thread.
envmust be a valid ENVSXP.- All argument SEXPs must still be valid.
§Returns
Ok(SEXP)with the result (unprotected — caller should protect if needed)Err(String)with the R error message on failure
Sourcepub unsafe fn namespaced(pkg: &str, fun_name: &str) -> Result<Self, String>
pub unsafe fn namespaced(pkg: &str, fun_name: &str) -> Result<Self, String>
Start building a namespaced call: pkg::fun(args…).
Looks up pkg::fun_name in the base environment and uses the resolved
function closure as the call target. This respects R’s namespace lookup
rules (exported + non-exported via :: / :::).
This is the runtime counterpart of the lowered pkg::fn(args…) form
in r!(pkg::fn(args…)).
§Safety
Must be called from the R main thread.
§Panics
Panics if pkg or fun_name contain a null byte.
§Errors
Returns Err(String) if the namespace lookup fails (package not loaded
or function not found).
Auto Trait Implementations§
impl Freeze for RCall
impl RefUnwindSafe for RCall
impl Send for RCall
impl Sync for RCall
impl Unpin for RCall
impl UnsafeUnpin for RCall
impl UnwindSafe for RCall
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> SizeHint for Twhere
T: ?Sized,
impl<T> SizeHint for Twhere
T: ?Sized,
Source§default fn lower_bound(&self) -> usize
default fn lower_bound(&self) -> usize
core_io_internals)[u8; 12] could return any value between 0 and
12 inclusively as a correct implementation. Read moreSource§impl<T> SizedTypeProperties for T
impl<T> SizedTypeProperties for T
Source§#[doc(hidden)]const SIZE: usize = _
#[doc(hidden)]const SIZE: usize = _
sized_type_properties)Source§#[doc(hidden)]const ALIGN: usize = _
#[doc(hidden)]const ALIGN: usize = _
sized_type_properties)Source§#[doc(hidden)]const ALIGNMENT: Alignment = _
#[doc(hidden)]const ALIGNMENT: Alignment = _
ptr_alignment_type)Source§#[doc(hidden)]const IS_ZST: bool = _
#[doc(hidden)]const IS_ZST: bool = _
sized_type_properties)Source§#[doc(hidden)]const LAYOUT: Layout = _
#[doc(hidden)]const LAYOUT: Layout = _
sized_type_properties)Source§#[doc(hidden)]const MAX_SLICE_LEN: usize = _
#[doc(hidden)]const MAX_SLICE_LEN: usize = _
sized_type_properties)[Self]. Read moreLayout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 32 bytes