Skip to main content

DataFrameView

Struct DataFrameView 

Source
pub struct DataFrameView {
    inner: NamedList,
    nrow: usize,
}
Expand description

A validated R data.frame backed by NamedList for O(1) column access.

This type wraps an existing R data.frame SEXP and provides:

  • O(1) column access by name via the NamedList index
  • O(1) column access by position
  • Schema validation via TypedListSpec
  • Conversion back to NamedList or raw SEXP

§Construction

Use DataFrameView::from_sexp to wrap an existing R data.frame, or NamedList::as_data_frame / List::as_data_frame to promote a list.

§Relationship to DataFrame<T>

DataFrame<T> is for creating data frames from row-oriented Rust data (implements IntoDataFrame). DataFrameView is for receiving data frames from R and inspecting their contents.

Fields§

§inner: NamedList§nrow: usize

Implementations§

Source§

impl DataFrameView

Source

pub fn from_sexp(sexp: SEXP) -> Result<Self, DataFrameError>

Wrap an existing R data.frame SEXP.

Validates that the object:

  1. Is a VECSXP (list)
  2. Inherits from "data.frame"
  3. Has a names attribute
  4. Has extractable row.names for nrow
§Errors

Returns DataFrameError if validation fails.

Source

fn from_named_list(inner: NamedList, nrow: usize) -> Self

Construct an DataFrameView from a NamedList and a pre-validated nrow.

This is used internally by NamedList::as_data_frame after validation.

Source

pub fn column<T>(&self, name: &str) -> Option<T>
where T: TryFromSexp<Error = SexpError>,

Get a column by name, converting each element to type T.

Uses O(1) name lookup via the NamedList index.

Returns None if the column name is not found or conversion fails.

§Example
let x: Option<Vec<f64>> = df.column("x");
Source

pub fn column_index<T>(&self, idx: usize) -> Option<T>
where T: TryFromSexp<Error = SexpError>,

Get a column by 0-based index, converting to type T.

Returns None if the index is out of bounds or conversion fails.

Source

pub fn column_raw(&self, name: &str) -> Option<SEXP>

Get the raw SEXP for a column by name.

Returns None if the column name is not found.

Source

pub fn nrow(&self) -> usize

Number of rows.

Source

pub fn ncol(&self) -> usize

Number of columns (number of named elements in the list).

Source

pub fn names(&self) -> impl Iterator<Item = &str>

Iterate over column names (unordered, from the HashMap index).

Source

pub fn contains_column(&self, name: &str) -> bool

Check if a column name exists.

Source

pub fn validate( &self, spec: &TypedListSpec, ) -> Result<TypedList, TypedListError>

Validate the data frame’s column types against a TypedListSpec.

This bridges the typed_list validation infrastructure to data frames, allowing schema checks like:

let spec = TypedListSpec::new(vec![
    TypedEntry::required("x", TypeSpec::Numeric(None)),
    TypedEntry::required("y", TypeSpec::Integer(None)),
]);
df.validate(&spec)?;
Source

pub fn into_named_list(self) -> NamedList

Convert to the underlying NamedList, consuming the data frame wrapper.

The SEXP retains its data.frame class attribute.

Source

pub fn as_list(&self) -> List

Get the underlying List.

Source

pub fn as_sexp(&self) -> SEXP

Get the underlying SEXP.

Trait Implementations§

Source§

impl Debug for DataFrameView

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl IntoR for DataFrameView

Source§

type Error = Infallible

The error type for fallible conversions. Read more
Source§

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>

Try to convert to SEXP without thread safety checks. Read more
Source§

fn into_sexp(self) -> SEXP

Convert this value to an R SEXP, panicking on error. Read more
Source§

unsafe fn into_sexp_unchecked(self) -> SEXP
where Self: Sized,

Convert to SEXP without thread safety checks, panicking on error. Read more
Source§

impl TryFromSexp for DataFrameView

Source§

type Error = SexpError

The error type returned when conversion fails.
Source§

fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error>

Attempt to convert an R SEXP to this Rust type. Read more
Source§

unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error>

Convert from SEXP without thread safety checks. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> RDebug for T
where T: Debug,

Source§

fn debug_str(&self) -> String

Get a compact debug string representation.
Source§

fn debug_str_pretty(&self) -> String

Get a pretty-printed debug string with indentation.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.