OmicsLake v2.0は、データリネージ(データの系譜)を中核に据えた、 モダンで使いやすいオミクスデータ管理パッケージです。 既存の解析ワークフローに最小限の変更で導入でき、 自動的にデータの依存関係を追跡します。
このビネットは、パッケージチェックを安定させるため既定で
eval = FALSE 相当の設定になっています。
ローカルで全チャンクを実行したい場合は、先に以下を設定してください。
その後、書き込み可能な作業ディレクトリでレンダリングしてください。
vignettes/omicslake_layer_use_cases.Rmdvignettes/omicslake_practical_workflow.Rmdvignettes/omicslake_comprehensive_guide.Rmdput(),
get(), snap(), tree()
だけで基本操作が完結# データフレームを保存
counts <- data.frame(
gene_id = paste0("GENE", 1:100),
sample_A = rpois(100, 50),
sample_B = rpois(100, 60)
)
lake$put("counts", counts)
# R オブジェクトも保存可能
params <- list(
method = "TMM",
log_transform = TRUE,
threshold = 0.05
)
lake$put("analysis_params", params)
# 読み込み
data <- lake$get("counts")
my_params <- lake$get("analysis_params")# SQL不要!Formula構文でフィルタ
high_expr <- lake$get("counts", where = ~ sample_A > 50)
# カスタム演算子も使用可能
mito_genes <- lake$get("counts", where = ~ gene_id %like% "MT-%")
# 複合条件
filtered <- lake$get("counts",
where = ~ sample_A > 30 & sample_B %between% c(40, 80)
)
# カラム選択も同時に
subset <- lake$get("counts",
where = ~ sample_A > 50,
select = c("gene_id", "sample_A")
)# lake$ref() で遅延参照を取得
# dplyrパイプ中の依存関係は自動追跡される!
library(dplyr)
lake$ref("counts") |>
filter(sample_A > 30) |>
mutate(
mean_expr = (sample_A + sample_B) / 2,
log2_ratio = log2(sample_B / sample_A)
) |>
arrange(desc(mean_expr)) |>
save_as("processed_counts", lake)
# リネージを確認
lake$tree("processed_counts")
# counts -> processed_counts# メタデータを追加
metadata <- data.frame(
gene_id = paste0("GENE", 1:100),
gene_name = paste0("Gene_", LETTERS[1:4])[rep(1:4, 25)],
biotype = sample(c("protein_coding", "lncRNA"), 100, replace = TRUE)
)
lake$put("gene_metadata", metadata)
# dplyrでJOIN
lake$ref("counts") |>
left_join(lake$ref("gene_metadata"), by = "gene_id") |>
filter(biotype == "protein_coding") |>
group_by(gene_name) |>
summarize(total_A = sum(sample_A), total_B = sum(sample_B)) |>
save_as("gene_summary", lake)
# 依存関係は自動追跡
lake$tree("gene_summary")
# counts -----> gene_summary
# gene_metadata ↗SQLを書かずに複雑なクエリを構築できます。
# メソッドチェーンでクエリを構築
result <- lake$from("counts")$
join("gene_metadata", on = "gene_id")$
where(biotype == "protein_coding")$
where(sample_A > 40)$
select(gene_id, gene_name, sample_A, sample_B)$
order_by(desc(sample_A))$
top(20, by = sample_A)$
run()
# 結果をLakeに保存
lake$from("counts")$
where(sample_A > 50)$
as("high_expression_genes")# 現在の状態をスナップショット
lake$snap("v1.0_raw_data")
# データを更新
normalized <- lake$get("counts")
normalized$sample_A <- log2(normalized$sample_A + 1)
normalized$sample_B <- log2(normalized$sample_B + 1)
lake$put("counts", normalized)
lake$snap("v1.1_normalized")
# 個別データにタグ付け
lake$tag("counts", "before_normalization")
# 過去バージョンを取得
original <- lake$get("counts", ref = "@tag(before_normalization)")
# スナップショットに復元
lake$restore("v1.0_raw_data")pipeline <- create_pipeline(lake, "preprocessing")
pipeline$
step("load", function() read.csv("data.csv"))$
step("clean", function(data) na.omit(data))$
step("normalize", function(data) {
data$value <- scale(data$value)
data
})$
step("filter", function(data) data[data$quality > 0.8, ])
result <- pipeline$run()
# 各ステップがLakeに記録される
lake$tree("preprocessing.filter")# %like% - SQLのLIKEパターンマッチング
genes[genes %like% "MT-%"] # MT-で始まる遺伝子
genes[genes %like% "%kinase%"] # kinaseを含む
# %ilike% - 大文字小文字を区別しない
names[names %ilike% "john%"]
# %between% - 範囲フィルタ
values[values %between% c(10, 100)]
# %regex% - 正規表現マッチング
ids[ids %regex% "^ENSG\\d{11}$"]
# %!in% - NOT IN
letters[letters %!in% c("a", "e", "i", "o", "u")]
# is_null / is_not_null
data[is_not_null(data$value), ]v1.0のol_*関数は引き続き動作しますが、新APIへの移行を推奨します:
| 旧API | 新API |
|---|---|
ol_init("proj") |
Lake$new("proj") |
ol_write("t", df) |
lake$put("t", df) |
ol_read("t") |
lake$get("t") |
ol_label("v1") |
lake$snap("v1") |
ol_tag("t", "v1") |
lake$tag("t", "v1") |
ol_checkout("v1") |
lake$restore("v1") |
ol_show_lineage("t") |
lake$tree("t") |
ol_query("SQL") |
lake$sql("SQL") |
OmicsLake v2.0の主要機能:
代表ユースケースの実装例は
vignettes/omicslake_layer_use_cases.Rmd
に集約しています。
詳細は各関数のヘルプを参照してください: