получить имя объекта Seurat в R во время цикла for
Я работаю над одноклеточной rna-seq в Seurat, и я пытаюсь создать цикл for() для объектов Seurat, чтобы нарисовать несколько тепловых карт средней экспрессии генов.
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. Отсюда мой вопрос: как заставить ggsave () использовать имя моего объекта seurat, хранящегося в "i"?
Я пробовал заменить (i) и удалить (заменить (i)) без успеха.
1 ответ
Короткий ответ: нельзя.
Длинный ответ: используя substitute
или подобное, чтобы попытаться получить i
имя даст вам... i
. (Это отличается от аргументов функции, где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
и для обработки локальной среды как структуры данных. Списки и векторы предназначены для использования в этой ситуации.