簡體   English   中英

R - 將矩陣的每一行轉換為字符向量並保存為命名列表

[英]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的行或列. (如果與lapplysapply一起使用,則默認為列)。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM