如何使用 sqlite 数据库填充 bigstatsr::FBM 以供以后使用?

Posted

技术标签:

【中文标题】如何使用 sqlite 数据库填充 bigstatsr::FBM 以供以后使用?【英文标题】:How to populate bigstatsr::FBM with sqlite database for later consumption? 【发布时间】:2021-03-03 21:44:41 【问题描述】:

我是 bigstatsr 软件包的新手。我有一个 sqlite 数据库,我想将其转换为 40k 行(基因)60K 列(样本)的 FBM 矩阵以供以后使用。我找到了如何用随机值填充矩阵的示例,但我不确定用我的 sqlite 数据库中的值填充矩阵的最佳方法是什么。

目前我是按顺序执行的,这里有一些模拟代码:

library(bigstatsr)
library(RSQLite)
library(dplyr)

number_genes <- 50e3
number_samples <- 70e3

large_genomic_matrix <- bigstatsr::FBM(nrow = number_genes, 
                                       ncol = number_samples, 
                                       type = "double", 
                                       backingfile = "fbm_large_genomic_matrix")

# Code to get a single df at the time
database_connection <- dbConnect(RSQLite::SQLite(), "database.sqlite")


sample_index_counter <- 1

for(current_sample in vector_with_sample_names)
  
  sqlite_df <- DBI::dbListTables(conn = database_connection) %>%
    dplyr::tbl("genomic_data") %>%
    dplyr::filter(sample == current_sample) %>% 
    dplyr::collect()
  
  large_genomic_matrix[, sample_index_counter] <- sqlite_df$value
  sample_index_counter <- sample_index_counter + 1
  


big_write(large_genomic_matrix, "large_genomic_matrix.out", every_nrow = 1000, progress = interactive())

我有两个问题:

    有没有更有效地填充矩阵的方法?不确定是否可以在这里使用 big_apply,也许是 foreach 我是否总是必须使用 big_write 才能稍后加载我的矩阵?如果是这样,为什么我不能只使用 bk 文件?

提前致谢

【问题讨论】:

【参考方案1】:

这是您自己进行的非常好的第一次尝试。

    这里效率低下的是为每个样本测试dplyr::filter(sample == current_sample)。我会先尝试使用match() 来获取索引。然后,有点低效的是单独填充每一列。如您所说,您可以使用big_apply() 分块执行此操作。

    big_write() 用于将 FBM 写入某个文本文件(例如 csv)。您需要在这里使用FBM()$save()(自述文件中示例的第二行),然后在.rds 文件(自述文件的下一行)上使用big_attach()

【讨论】:

谢谢,我会尝试这些解决方案!

以上是关于如何使用 sqlite 数据库填充 bigstatsr::FBM 以供以后使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用预填充的 sqlite 数据库发布 phonegap 3.5 应用程序

如何在 Flutter 中使用预填充的 sqlite 数据库我的应用程序

如何使用从我的 SQLite 数据库中检索到的数据填充 tkinter 下拉框?

如何使用存储在 sqlite 数据库中的数据填充我的列表

Android 从 SQLite 数据库填充自定义 ListView

使用 Core Data 一对多关系从 JSON 数组填充 sqlite 数据库