簡體   English   中英

在 for 循環期間檢索 R 中的 Seurat object 名稱

[英]retreive Seurat object name in R during a for loop

我正在研究 Seurat 上的單細胞 rna-seq,我正在嘗試在 Seurat 對象上創建一個 for() 循環,以繪制幾個平均基因表達的熱圖。

for(i in c(seuratobject1, seuratobject2, seuratobject3)){
  cluster.averages <- data.frame(AverageExpression(i, features = genelist))
  cluster.averages$rowmeans <- rowMeans(cluster.averages)
  genelist.new <- as.list(rownames(cluster.averages))
  cluster.averages <- cluster.averages[order(cluster.averages$rowmeans),]
  HMP.ordered <- DoHeatmap(i, features = genelist.new, size = 3, draw.lines = T)
  ggsave(HMP.ordered, file=paste0(i, ".HMP.ordered.png"), width=7, height=30)

ggsave 行不起作用,因為它將 i 作為 seurat object。 因此我的問題是:如何讓 ggsave() 使用存儲在“i”中的我的 seurat object 的名稱?

我嘗試了 substitute(i) 和 deparse(substitute(i)) 沒有成功。

簡短的回答:你不能。

長答案:使用substitute或類似來嘗試獲取i的名字會給你... i (這與function arguments不同,其中substitute(arg)為您提供調用的參數表達式。)

您需要改用命名向量。 理想情況下,您應該將 Seurat 對象放在一個列表中。 但是要即時創建這樣的列表,您可以使用get

names = c('seuratobject1', 'seuratobject2', 'seuratobject3')

for(i in names) {
    cluster.averages <- data.frame(AverageExpression(get(i), features = genelist))
    # … rest is identical …
}

也就是說,我通常強烈反對使用get並將本地環境視為數據結構。 列表和向量被設計用於這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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