pub struct DataFrame<T: IntoList> {
rows: Vec<T>,
}Expand description
Convert row-oriented data into a column-oriented R data.frame.
This type collects a sequence of row elements (structs implementing IntoList)
and transposes them into column vectors suitable for creating an R data.frame.
§Example
ⓘ
use miniextendr_api::{miniextendr, convert::DataFrame};
#[derive(IntoList)]
struct Person {
name: String,
age: i32,
height: f64,
}
#[miniextendr]
fn make_people() -> DataFrame<Person> {
DataFrame::from_rows(vec![
Person { name: "Alice".into(), age: 30, height: 165.0 },
Person { name: "Bob".into(), age: 25, height: 180.0 },
Person { name: "Carol".into(), age: 35, height: 170.0 },
])
}
// In R: make_people() returns a data.frame with 3 rows and columns: name, age, height§Row-oriented to Column-oriented
R data frames are column-oriented (each column is a vector), but data is often
produced row-by-row in Rust. DataFrame handles the transposition:
Input (row-oriented): Output (column-oriented):
Row 1: {name: "A", age: 30} name column: ["A", "B", "C"]
Row 2: {name: "B", age: 25} → age column: [30, 25, 35]
Row 3: {name: "C", age: 35}Fields§
§rows: Vec<T>Implementations§
Trait Implementations§
Source§impl<T: IntoList> FromIterator<T> for DataFrame<T>
impl<T: IntoList> FromIterator<T> for DataFrame<T>
Source§fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self
Creates a value from an iterator. Read more
Source§impl<T: IntoList> IntoDataFrame for DataFrame<T>
impl<T: IntoList> IntoDataFrame for DataFrame<T>
Source§impl<T: IntoList> IntoR for DataFrame<T>
IntoR implementation for DataFrame.
impl<T: IntoList> IntoR for DataFrame<T>
IntoR implementation for DataFrame.
This allows DataFrame to be returned directly from #[miniextendr] functions.
Source§type Error = Infallible
type Error = Infallible
The error type for fallible conversions. Read more
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
Auto Trait Implementations§
impl<T> Freeze for DataFrame<T>
impl<T> RefUnwindSafe for DataFrame<T>where
T: RefUnwindSafe,
impl<T> Send for DataFrame<T>where
T: Send,
impl<T> Sync for DataFrame<T>where
T: Sync,
impl<T> Unpin for DataFrame<T>where
T: Unpin,
impl<T> UnsafeUnpin for DataFrame<T>
impl<T> UnwindSafe for DataFrame<T>where
T: UnwindSafe,
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,
Source§impl<C, T> RFromIter<T> for Cwhere
C: FromIterator<T>,
impl<C, T> RFromIter<T> for Cwhere
C: FromIterator<T>,
Source§impl<T> SizeEq<MaybeUninit<T>> for T
impl<T> SizeEq<MaybeUninit<T>> for T
type CastFrom = CastSizedExact
Source§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 moreSource§impl<T> ToDataFrameExt for Twhere
T: IntoDataFrame,
impl<T> ToDataFrameExt for Twhere
T: IntoDataFrame,
Source§fn to_data_frame(self) -> ToDataFrame<Self>
fn to_data_frame(self) -> ToDataFrame<Self>
Wrap
self in ToDataFrame for R data.frame conversion.impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> InvariantsEq<ManuallyDrop<T>> for Twhere
T: ?Sized,
impl<T> InvariantsEq<T> for Twhere
T: ?Sized,
impl<T> InvariantsEq<Unalign<T>> for T
impl<T> InvariantsEq<Wrapping<T>> for T
impl<Src, Dst, A, SV, DV, R> MutationCompatible<Src, A, SV, DV, (BecauseRead, R)> for Dst
impl<Src, Dst, A, SV, DV> MutationCompatible<Src, A, SV, DV, BecauseInvariantsEq> for Dstwhere
A: Aliasing,
SV: Validity,
DV: Validity,
Src: TransmuteFrom<Dst, DV, SV> + ?Sized,
Dst: TransmuteFrom<Src, SV, DV> + InvariantsEq<Src> + ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> TransmuteFrom<Cell<T>, Valid, Valid> for Twhere
T: ?Sized,
impl<T> TransmuteFrom<ManuallyDrop<T>, Valid, Valid> for Twhere
T: ?Sized,
impl<T> TransmuteFrom<ReadOnly<T>, Valid, Valid> for Twhere
T: ?Sized,
impl<Src, Dst> TransmuteFrom<Src, Initialized, Initialized> for Dst
impl<Src, Dst, V> TransmuteFrom<Src, V, Uninit> for Dst
impl<Src, Dst> TransmuteFrom<Src, Valid, Initialized> for Dst
impl<T> TransmuteFrom<Unalign<T>, Valid, Valid> for T
impl<T> TransmuteFrom<UnsafeCell<T>, Valid, Valid> for Twhere
T: ?Sized,
impl<T> TransmuteFrom<Wrapping<T>, Valid, Valid> for T
impl<Src, Dst, A, SV, DV, C, R> TransmuteFromPtr<Src, A, SV, DV, C, R> for Dstwhere
A: Aliasing,
SV: Validity,
DV: Validity,
C: CastExact<Src, Dst>,
Dst: TransmuteFrom<Src, SV, DV> + TryTransmuteFromPtr<Src, A, SV, DV, C, R> + ?Sized,
Src: ?Sized,
impl<Src, Dst, SV, DV, A, C, R> TryTransmuteFromPtr<Src, A, SV, DV, C, (BecauseMutationCompatible, R)> for Dstwhere
A: Aliasing,
SV: Validity,
DV: Validity,
Src: TransmuteFrom<Dst, DV, SV> + ?Sized,
Dst: MutationCompatible<Src, A, SV, DV, R> + ?Sized,
C: CastExact<Src, Dst>,
Layout§
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: 24 bytes