получить имя объекта 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и для обработки локальной среды как структуры данных. Списки и векторы предназначены для использования в этой ситуации.

Другие вопросы по тегам