[英]R - convert each row of a matrix in a character vector and save as named list
我有一個包含生物通路(行)和相應基因(列)的矩陣。 如果基因存在於通路中,則細胞包含 1,否則為 0。請參見下面的示例:
mat=matrix(c(0,0,1,0,1,1,1,1,1), nrow = 3, ncol = 3)
row.names(mat) = c("pathwayX", "pathwayY", "pathwayZ")
colnames(mat) = c("Gene1", "Gene2", "Gene3")
基因1 | 基因2 | 基因3 | |
---|---|---|---|
途徑X | 0 | 0 | 1 |
途徑Y | 0 | 1 | 1 |
途徑Z | 1 | 1 | 1 |
我需要的是每個具有構成基因的途徑的特征向量,保存在一個列表中(例如,名為gene_sets)。 在這個例子中,這將是:
> gene_sets
$pathwayX
"Gene3"
$pathwayY
"Gene2" "Gene3"
$pathwayZ
"Gene1" "Gene2" "Gene3"
此外,我需要描述路徑名稱的字符向量,保存在列表中(例如命名描述)。 在這個例子中,這將是:
> description
$pathwayX
"pathwayX"
$pathwayY
"pathwayY"
$pathwayZ
"pathwayZ"
背景:帶有成本輸入的包 pathfindR 需要向量列表( https://github.com/egeulgen/pathfindR/wiki/Analysis-Using-Custom-Gene-Sets )。
干得好,給我們一個可重現的例子。 您可以使用apply
系列函數,其中lapply
為您提供一個列表作為輸出, sapply
將嘗試簡化結果,並且apply
讓您決定是否要使用margin
參數將函數應用於data.frame
的行或列. (如果與lapply
或sapply
一起使用,則默認為列)。
mat <- as.data.frame(mat)
gene_sets <- apply(mat, 1, function(x) colnames(mat)[x==1])
description <- lapply(row.names(mat), function(x) x)
names(description) <- row.names(mat)
> gene_sets
$pathwayX
[1] "Gene3"
$pathwayY
[1] "Gene2" "Gene3"
$pathwayZ
[1] "Gene1" "Gene2" "Gene3"
> description
$pathwayX
[1] "pathwayX"
$pathwayY
[1] "pathwayY"
$pathwayZ
[1] "pathwayZ"
不確定我是否遵循您關於description
列表的邏輯,但這似乎給出了您預期的結果。
是否也可以將列表反轉為二進制矩陣?
堅持最初的例子,從
gene_sets = list(pathwayX= c("gene3"),pathwayY= c("gene2", "gene3"),pathwayz= c("gene1", "gene2","gene3"))
> gene_sets
$pathwayX
"Gene3"
$pathwayY
"Gene2" "Gene3"
$pathwayZ
"Gene1" "Gene2" "Gene3"
到二進制矩陣
基因1 | 基因2 | 基因3 | |
---|---|---|---|
途徑X | 0 | 0 | 1 |
途徑Y | 0 | 1 | 1 |
途徑Z | 1 | 1 | 1 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.