31 个版本 (3 个稳定版)
1.0.5 | 2024年7月4日 |
---|---|
1.0.2 | 2024年2月6日 |
1.0.0 | 2023年11月12日 |
0.2.37 | 2023年10月29日 |
0.2.23 | 2022年6月30日 |
#15 in 生物学
每月382次下载
2MB
35K SLoC
bed-reader
简单高效地读取和写入PLINK BED格式。
亮点
- 快速和多线程
- 支持多种索引方法。按个体(样本)和/或SNPs(变体)切片数据。
- 此库的Python API被PySnpTools、FaST-LMM和PyStatGen使用。
- 支持PLINK 1.9。
- 本地或从云中读取数据,高效且直接。
安装
完整版本:可以读取本地和云文件
cargo add bed-reader
最小版本:只能读取本地文件
cargo add bed-reader --no-default-features
示例
从.bed文件中读取所有基因型数据。
use ndarray as nd;
use bed_reader::{Bed, ReadOptions, assert_eq_nan, sample_bed_file};
let file_name = sample_bed_file("small.bed")?;
let mut bed = Bed::new(file_name)?;
let val = ReadOptions::builder().f64().read(&mut bed)?;
assert_eq_nan(
&val,
&nd::array![
[1.0, 0.0, f64::NAN, 0.0],
[2.0, 0.0, f64::NAN, 2.0],
[0.0, 1.0, 2.0, 0.0]
],
);
# use bed_reader::BedErrorPlus; // '#' needed for doctest
# Ok::<(), Box<BedErrorPlus>>(())
读取每隔一个个体(样本)和SNPs(变体)20到30。
use ndarray::s;
let file_name = sample_bed_file("some_missing.bed")?;
let mut bed = Bed::new(file_name)?;
let val = ReadOptions::builder()
.iid_index(s![..;2])
.sid_index(20..30)
.f64()
.read(&mut bed)?;
assert!(val.dim() == (50, 10));
# use bed_reader::{Bed, ReadOptions, BedErrorPlus, assert_eq_nan, sample_bed_file}; // '#' needed for doctest
# Ok::<(), Box<BedErrorPlus>>(())
列出前5个个体(样本)ID,前5个SNPs(变体)ID,以及每个独特的染色体。然后,读取染色体5中的每个基因组值。
# use ndarray::s; // '#' needed for doctest
# use bed_reader::{Bed, ReadOptions, assert_eq_nan, sample_bed_file};
# let file_name = sample_bed_file("some_missing.bed")?;
use std::collections::HashSet;
let mut bed = Bed::new(file_name)?;
println!("{:?}", bed.iid()?.slice(s![..5])); // Outputs ndarray: ["iid_0", "iid_1", "iid_2", "iid_3", "iid_4"]
println!("{:?}", bed.sid()?.slice(s![..5])); // Outputs ndarray: ["sid_0", "sid_1", "sid_2", "sid_3", "sid_4"]
println!("{:?}", bed.chromosome()?.iter().collect::<HashSet<_>>());
// Outputs: {"12", "10", "4", "8", "19", "21", "9", "15", "6", "16", "13", "7", "17", "18", "1", "22", "11", "2", "20", "3", "5", "14"}
let val = ReadOptions::builder()
.sid_index(bed.chromosome()?.map(|elem| elem == "5"))
.f64()
.read(&mut bed)?;
assert!(val.dim() == (100, 6));
# use bed_reader::BedErrorPlus; // '#' needed for doctest
# Ok::<(), Box<BedErrorPlus>>(())
从云中:打开文件并读取索引位置2的SNPs(变体)数据。(有关在云中指定文件的详细信息,请参阅"云URL和CloudFile
示例"。)
use ndarray as nd;
use bed_reader::{assert_eq_nan, BedCloud, ReadOptions};
# #[cfg(feature = "tokio")] Runtime::new().unwrap().block_on(async { // '#' needed for doc test
let url = "https://raw.githubusercontent.com/fastlmm/bed-sample-files/main/small.bed";
let mut bed_cloud = BedCloud::new(url).await?;
let val = ReadOptions::builder().sid_index(2).f64().read_cloud(&mut bed_cloud).await?;
assert_eq_nan(&val, &nd::array![[f64::NAN], [f64::NAN], [2.0]]);
# Ok::<(), Box<dyn std::error::Error>>(()) }).unwrap();
# #[cfg(feature = "tokio")] use {tokio::runtime::Runtime, bed_reader::BedErrorPlus};
项目链接
依赖项
~27–38MB
~549K SLoC