R中Seurat分析中的for循环函数

问题描述

我试图获得我制作的函数的多个输出

ratio_marker_out_2 = function(marker_gene,cluster_id){
marker_gene = list(row.names(FindMarkers(glioblastoma,ident.1 = cluster_id)))
for (gene in marker_gene){
all_cells_all_markers = glioblastoma@assays$RNA@counts[gene,]
selected_cells_all_marker = all_cells_all_markers[cluster_id!=Idents(glioblastoma)]
gene_count_out_cluster = glioblastoma@assays$RNA@counts[,cluster_id!=Idents(glioblastoma)] 
ratio_out = sum(selected_cells_all_marker)/sum(gene_count_out_cluster) 
} 
return(ratio_out)
}

这里,marker_gene 的长度大约是数百。假设长度为 100。我想在 marker_gene 中获得每个基因的 ratio_out。然而,当运行这个函数时,我只得到一个输出而不是一个 100 ratio_out 的列表。可以请任何人帮助如何解决它吗?

我得到的输出

ratio_marker_out_2(marker_gene,0)

1 0.5354895。请看下面的图片

enter image description here

解决方法

可以是 sum 内置函数。

默认情况下,它返回一个数字。所以当你这样做时:

ratio_out = sum(selected_cells_all_marker)/sum(gene_count_out_cluster)

实际上是将两个数字相除。

所以如果你想返回一个列表,你必须除以,根据你的计算,只是

ratio_out = (selected_cells_all_marker)/sum(gene_count_out_cluster)
,

我已经使用

解决了这个问题
all_cells_all_markers[marker_gene,cluster_id!=Idents(glioblastoma)]
ratio_out = (selected_cells_all_marker)/sum(gene_count_out_cluster).