L oop над символьным вектором в R - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь собрать al oop для (), чтобы нарисовать и сохранить ggplot для списка генов в наборе данных. Мой исходный код выглядит следующим образом:

for(i in genelist){
  plot <- ggplot() +
           geom_density(data = mydata, aes(x=log2(i)), fill="pink", alpha = 0.5) +
           xlab(paste("log2 ", i))
  ggsave(plot, filename = paste("plot_",i ,".png"))
  }

genelist - это вектор chr.

mydata - это фрейм данных, в котором имена столбцов - это имена генов, имена строк - это штрих-коды пациентов, а матрица - значения счетчиков.

Я получил следующую ошибку:

Сохранение 11,3 x 5,98 в изображении Ошибка в log2 (i): без нумерации c аргумент математической функции

Поскольку, похоже, ошибка возникает из-за сохранения графика, я попробовал код без:

for(i in genelist){
  plot <- ggplot() +
           geom_density(data = mydata, aes(x=log2(i)), fill="pink", alpha = 0.5) +
           xlab(paste("log2 ", i))
   }

l oop прошел до конца без ошибок (i = мой последний ген в genelist), но когда я попытался отобразить график:

Ошибка в log2 (i) : non-numberri c аргумент математической функции

Что я делаю не так?

1 Ответ

0 голосов
/ 13 апреля 2020

Мы можем написать функцию:

library(ggplot2)

plot_save <- function(i) {
    plot <- ggplot() +
             geom_density(data = mydata, aes(x=log2(!!sym(i)), 
                          fill="pink", alpha = 0.5)) +
             xlab(paste("log2 ", i))

    ggsave(plot, filename = paste0("plot_",i ,".png"))
}

и передать genelist в функцию.

lapply(genelist, plot_save)
...