[英]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.