pub struct AsNumeric(pub Option<f64>);Expand description
A numeric scalar read like R’s as.numeric(): from a double, integer,
logical, character, or factor (by its labels) of length 1. NA of any
type is None.
It follows the same reading rules as AsNumericVec, and also requires
length 1 (SexpError::Length otherwise). A value that is not a number
fails with non-numeric value(s): "n/a" (element 1). Under
#[miniextendr(no_na)] it refuses the same values as the vector marker
(see AsNumericVec, “no_na”), with 'x' must not be NA.
§Example
ⓘ
use miniextendr_api::{miniextendr, AsNumeric};
#[miniextendr]
fn half(x: AsNumeric) -> Option<f64> {
x.0.map(|v| v / 2.0)
}
// R: half(3L) → 1.5
// half(" 1e3 ") → 500
// half(factor("10")) → 5 (the label, not the code)
// half(NA_character_) → NA
// half("n/a") → error: non-numeric value(s): "n/a" (element 1)Tuple Fields§
§0: Option<f64>Trait Implementations§
impl Copy for AsNumeric
Source§impl IntoR for AsNumeric
impl IntoR for AsNumeric
Source§fn try_into_sexp(self) -> Result<SEXP, Self::Error>
fn try_into_sexp(self) -> Result<SEXP, Self::Error>
Try to convert this value to an R SEXP. Read more
Source§unsafe fn try_into_sexp_unchecked(self) -> Result<SEXP, Self::Error>
unsafe fn try_into_sexp_unchecked(self) -> Result<SEXP, Self::Error>
Try to convert to SEXP without thread safety checks. Read more
Source§unsafe fn into_sexp_unchecked(self) -> SEXP
unsafe fn into_sexp_unchecked(self) -> SEXP
Convert to SEXP without thread safety checks, panicking on error. Read more
impl StructuralPartialEq for AsNumeric
impl TrivialClone for AsNumeric
Source§impl TryFromSexp for AsNumeric
impl TryFromSexp for AsNumeric
Source§fn __mx_has_na(&self) -> bool
fn __mx_has_na(&self) -> bool
Whether the converted argument holds a value
#[miniextendr(no_na)]
refuses after the conversion. Read moreSource§fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error>
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error>
Attempt to convert an R SEXP to this Rust type. Read more
Source§const NATIVE_BORROW: Option<NativeBorrow> = None
const NATIVE_BORROW: Option<NativeBorrow> = None
Native vector storage retained by this conversion, if any. Read more
Source§const CHARACTER_ONLY: bool = false
const CHARACTER_ONLY: bool = false
Whether this conversion accepts only character input: every value it
converts, other than
NULL, is a character vector or a factor. Read moreSource§#[doc(hidden)]const __MX_EXPECTATION: Option<&'static str> = None
#[doc(hidden)]const __MX_EXPECTATION: Option<&'static str> = None
What an argument of this type must be, in R terms, when
#[miniextendr] cannot tell from the type as written: the
<expected> of a failed conversion’s '<p>' must be <expected>: .... Read moreSource§unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error>
unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error>
Convert from SEXP without thread safety checks. Read more
Source§#[doc(hidden)]unsafe fn __mx_try_from_rooted(root: Root<'_>) -> Result<Self, Self::Error>
#[doc(hidden)]unsafe fn __mx_try_from_rooted(root: Root<'_>) -> Result<Self, Self::Error>
Convert with a scope able to retain uncached ALTREP elements.
Custom reference converters keep their existing behavior by default. Read more
Source§#[doc(hidden)]fn __mx_input_has_na(&self, input: SEXP) -> bool
#[doc(hidden)]fn __mx_input_has_na(&self, input: SEXP) -> bool
Whether
#[miniextendr(no_na)] refuses this converted argument, read
from input (the R value it converted from), when no R guard ran. Read moreSource§#[doc(hidden)]fn __mx_try_from_sexp_with_check(
sexp: SEXP,
check: &ElementCheck<'_>,
) -> Result<Self, SexpError>
#[doc(hidden)]fn __mx_try_from_sexp_with_check(
sexp: SEXP,
check: &ElementCheck<'_>,
) -> Result<Self, SexpError>
Convert, running
check, an element type’s
TryFromSexpElement::check_sexp,
on the R value that carries an element’s class (#1837). Read moreSource§#[doc(hidden)]unsafe fn __mx_try_from_sexp_unchecked_with_check(
sexp: SEXP,
check: &ElementCheck<'_>,
) -> Result<Self, SexpError>
#[doc(hidden)]unsafe fn __mx_try_from_sexp_unchecked_with_check(
sexp: SEXP,
check: &ElementCheck<'_>,
) -> Result<Self, SexpError>
Auto Trait Implementations§
impl Freeze for AsNumeric
impl RefUnwindSafe for AsNumeric
impl Send for AsNumeric
impl Sync for AsNumeric
impl Unpin for AsNumeric
impl UnsafeUnpin for AsNumeric
impl UnwindSafe for AsNumeric
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConsumingFallible for Twhere
T: Clone,
Source§impl<I> OptionInner for I
impl<I> OptionInner for I
Source§const OPTION_NATIVE_BORROW: Option<NativeBorrow> = const OPTION_NATIVE_BORROW: Option<NativeBorrow> =
<Option<I> as TryFromSexp>::NATIVE_BORROW;
const OPTION_NATIVE_BORROW: Option<NativeBorrow> = const OPTION_NATIVE_BORROW: Option<NativeBorrow> = <Option<I> as TryFromSexp>::NATIVE_BORROW;
<Option<Self> as TryFromSexp>::NATIVE_BORROW.Source§const OPTION_CHARACTER_ONLY: bool = const OPTION_CHARACTER_ONLY: bool =
<Option<I> as TryFromSexp>::CHARACTER_ONLY;
const OPTION_CHARACTER_ONLY: bool = const OPTION_CHARACTER_ONLY: bool = <Option<I> as TryFromSexp>::CHARACTER_ONLY;
<Option<Self> as TryFromSexp>::CHARACTER_ONLY.impl<T> Printable for T
Source§impl<T> RCopy for Twhere
T: Copy,
impl<T> RCopy for Twhere
T: Copy,
Source§impl<T> RDebug for Twhere
T: Debug,
impl<T> RDebug for Twhere
T: Debug,
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
🔬This is a nightly-only experimental API. (
core_io_internals)Returns a lower bound on the number of elements this container-like item
contains.
For example, an array
[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 = _
🔬This is a nightly-only experimental API. (
sized_type_properties)Source§#[doc(hidden)]const ALIGN: usize = _
#[doc(hidden)]const ALIGN: usize = _
🔬This is a nightly-only experimental API. (
sized_type_properties)Source§#[doc(hidden)]const ALIGNMENT: Alignment = _
#[doc(hidden)]const ALIGNMENT: Alignment = _
🔬This is a nightly-only experimental API. (
ptr_alignment_type)Source§#[doc(hidden)]const IS_ZST: bool = _
#[doc(hidden)]const IS_ZST: bool = _
🔬This is a nightly-only experimental API. (
sized_type_properties)Source§#[doc(hidden)]const LAYOUT: Layout = _
#[doc(hidden)]const LAYOUT: Layout = _
🔬This is a nightly-only experimental API. (
sized_type_properties)Source§#[doc(hidden)]const MAX_SLICE_LEN: usize = _
#[doc(hidden)]const MAX_SLICE_LEN: usize = _
🔬This is a nightly-only experimental API. (
sized_type_properties)The largest safe length for a
[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: 16 bytes