Index

Enum Index 

Source
pub enum Index {
    All,
    One(isize),
    Vec(Vec<isize>),
    NDArray(Array1<isize>),
    VecBool(Vec<bool>),
    NDArrayBool(Array1<bool>),
    NDSliceInfo(SliceInfo1),
    RangeAny(RangeAny),
}
Expand description

A specification of which individuals (samples) or SNPs (variants) to read.

See the Table of Index Expressions for a list of expressions for selecting individuals (sample) and SNPs (variants).

By default, all individuals or SNPs are read. The indices can be specified as:

  • an index (negative numbers count from the end)
  • a vector or ndarray of indices
  • a Rust range (negatives not allowed)
  • a vector or ndarray of booleans
  • an ndarray slice (negative indexing and steps allowed)

§Examples

use ndarray as nd;
use bed_reader::{Bed, ReadOptions, sample_bed_file};
use bed_reader::assert_eq_nan;
use ndarray::s;

let file_name = sample_bed_file("some_missing.bed")?;
let mut bed = Bed::new(file_name)?;
println!("{:?}", bed.dim()?); // prints (100, 100)

// Read all individuals and all SNPs
let val = ReadOptions::builder().f64().read(&mut bed)?;
assert!(val.dim() == (100, 100));

// Read the individual at index position 10 and all SNPs
let val = ReadOptions::builder().iid_index(10).f64().read(&mut bed)?;
assert!(val.dim() == (1, 100));

// Read the individuals at index positions 0,5, 1st-from-the-end and
// the SNP at index position 3
let val = ReadOptions::builder()
    .iid_index(vec![0, 5, -1])
    .sid_index(3)
    .f64()
    .read(&mut bed)?;
assert!(val.dim() == (3, 1));
// Repeat, but with an ndarray
let val = ReadOptions::builder()
    .iid_index(nd::array![0, 5, -1])
    .sid_index(3)
    .f64()
    .read(&mut bed)?;
assert!(val.dim() == (3, 1));
// Repeat, but with an Rust array
let val = ReadOptions::builder()
    .iid_index([0, 5, -1])
    .sid_index(3)
    .f64()
    .read(&mut bed)?;
assert!(val.dim() == (3, 1));
// Create a boolean ndarray identifying SNPs in chromosome 5,
// then select those SNPs.
let chrom_5 = bed.chromosome()?.map(|elem| elem == "5");
let val = ReadOptions::builder()
    .sid_index(chrom_5)
    .f64()
    .read(&mut bed)?;
assert!(val.dim() == (100, 6));
// Use ndarray's slice macro, [`s!`](https://docs.rs/ndarray/latest/ndarray/macro.s.html),
// to select every 2nd individual and every 3rd SNP.
let val = ReadOptions::builder()
    .iid_index(s![..;2])
    .sid_index(s![..;3])
    .f64()
    .read(&mut bed)?;
assert!(val.dim() == (50, 34));
// Use ndarray's slice macro, [`s!`](https://docs.rs/ndarray/latest/ndarray/macro.s.html),
// to select the 10th-from-last individual to the last, in reverse order,
// and every 3rd SNP in reverse order.)
let val = ReadOptions::builder()
    .iid_index(s![-10..;-1])
    .sid_index(s![..;-3])
    .f64()
    .read(&mut bed)?;
assert!(val.dim() == (10, 34));

Variants§

§

All

§

One(isize)

§

Vec(Vec<isize>)

§

NDArray(Array1<isize>)

§

VecBool(Vec<bool>)

§

NDArrayBool(Array1<bool>)

§

NDSliceInfo(SliceInfo1)

§

RangeAny(RangeAny)

Implementations§

Source§

impl Index

Source

pub fn to_vec(&self, count: usize) -> Result<Vec<isize>, Box<BedErrorPlus>>

Turns an Index into a vector of usize indexes. Negative means count from end.

Source§

impl Index

Source

pub fn len(&self, count: usize) -> Result<usize, Box<BedErrorPlus>>

Returns the number of elements in an Index.

Source

pub fn is_empty(&self, count: usize) -> Result<bool, Box<BedErrorPlus>>

Returns true if the Index is empty.

Trait Implementations§

Source§

impl Clone for Index

Source§

fn clone(&self) -> Index

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Index

Source§

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

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

impl From<&[bool]> for Index

Source§

fn from(array: &[bool]) -> Index

Converts to this type from the input type.
Source§

impl<const N: usize> From<&[bool; N]> for Index

Source§

fn from(array: &[bool; N]) -> Index

Converts to this type from the input type.
Source§

impl From<&[isize]> for Index

Source§

fn from(array: &[isize]) -> Index

Converts to this type from the input type.
Source§

impl<const N: usize> From<&[isize; N]> for Index

Source§

fn from(array: &[isize; N]) -> Index

Converts to this type from the input type.
Source§

impl From<&ArrayBase<OwnedRepr<bool>, Dim<[usize; 1]>>> for Index

Source§

fn from(nd_array_bool: &Array1<bool>) -> Index

Converts to this type from the input type.
Source§

impl From<&ArrayBase<OwnedRepr<isize>, Dim<[usize; 1]>>> for Index

Source§

fn from(nd_array: &Array1<isize>) -> Index

Converts to this type from the input type.
Source§

impl From<&ArrayBase<ViewRepr<&bool>, Dim<[usize; 1]>>> for Index

Source§

fn from(view: &ArrayView1<'_, bool>) -> Index

Converts to this type from the input type.
Source§

impl From<&ArrayBase<ViewRepr<&isize>, Dim<[usize; 1]>>> for Index

Source§

fn from(view: &ArrayView1<'_, isize>) -> Index

Converts to this type from the input type.
Source§

impl From<&Range<usize>> for Index

Source§

fn from(range_thing: &Range<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<&RangeFrom<usize>> for Index

Source§

fn from(range_thing: &RangeFrom<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<&RangeFull> for Index

Source§

fn from(range_thing: &RangeFull) -> Index

Converts to this type from the input type.
Source§

impl From<&RangeInclusive<usize>> for Index

Source§

fn from(range_thing: &RangeInclusive<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<&RangeTo<usize>> for Index

Source§

fn from(range_thing: &RangeTo<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<&RangeToInclusive<usize>> for Index

Source§

fn from(range_thing: &RangeToInclusive<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<&SliceInfo<[SliceInfoElem; 1], Dim<[usize; 1]>, Dim<[usize; 1]>>> for Index

Source§

fn from(slice_info: &SliceInfo1) -> Index

Converts to this type from the input type.
Source§

impl From<&Vec<bool>> for Index

Source§

fn from(vec_ref: &Vec<bool>) -> Index

Converts to this type from the input type.
Source§

impl From<&Vec<isize>> for Index

Source§

fn from(vec_ref: &Vec<isize>) -> Index

Converts to this type from the input type.
Source§

impl From<&isize> for Index

Source§

fn from(one: &isize) -> Index

Converts to this type from the input type.
Source§

impl<const N: usize> From<[bool; N]> for Index

Source§

fn from(array: [bool; N]) -> Index

Converts to this type from the input type.
Source§

impl<const N: usize> From<[isize; N]> for Index

Source§

fn from(array: [isize; N]) -> Index

Converts to this type from the input type.
Source§

impl From<()> for Index

Source§

fn from((): ()) -> Index

Converts to this type from the input type.
Source§

impl From<ArrayBase<OwnedRepr<bool>, Dim<[usize; 1]>>> for Index

Source§

fn from(nd_array_bool: Array1<bool>) -> Index

Converts to this type from the input type.
Source§

impl From<ArrayBase<OwnedRepr<isize>, Dim<[usize; 1]>>> for Index

Source§

fn from(nd_array: Array1<isize>) -> Index

Converts to this type from the input type.
Source§

impl From<ArrayBase<ViewRepr<&bool>, Dim<[usize; 1]>>> for Index

Source§

fn from(view: ArrayView1<'_, bool>) -> Index

Converts to this type from the input type.
Source§

impl From<ArrayBase<ViewRepr<&isize>, Dim<[usize; 1]>>> for Index

Source§

fn from(view: ArrayView1<'_, isize>) -> Index

Converts to this type from the input type.
Source§

impl From<Range<usize>> for Index

Source§

fn from(range_thing: Range<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<RangeFrom<usize>> for Index

Source§

fn from(range_thing: RangeFrom<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<RangeFull> for Index

Source§

fn from(range_thing: RangeFull) -> Index

Converts to this type from the input type.
Source§

impl From<RangeInclusive<usize>> for Index

Source§

fn from(range_thing: RangeInclusive<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<RangeTo<usize>> for Index

Source§

fn from(range_thing: RangeTo<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<RangeToInclusive<usize>> for Index

Source§

fn from(range_thing: RangeToInclusive<usize>) -> Index

Converts to this type from the input type.
Source§

impl From<SliceInfo<[SliceInfoElem; 1], Dim<[usize; 1]>, Dim<[usize; 1]>>> for Index

Source§

fn from(slice_info: SliceInfo1) -> Index

Converts to this type from the input type.
Source§

impl From<Vec<bool>> for Index

Source§

fn from(vec_bool: Vec<bool>) -> Index

Converts to this type from the input type.
Source§

impl From<Vec<isize>> for Index

Source§

fn from(vec: Vec<isize>) -> Index

Converts to this type from the input type.
Source§

impl From<isize> for Index

Source§

fn from(one: isize) -> Index

Converts to this type from the input type.

Auto Trait Implementations§

§

impl Freeze for Index

§

impl RefUnwindSafe for Index

§

impl Send for Index

§

impl Sync for Index

§

impl Unpin for Index

§

impl UnwindSafe for Index

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more