Как можно автоматизировать этот раздел функции grid.arrange в R - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть фрагмент кода, который выглядит следующим образом:

p1 <- plotQC(sce_1, type = "highest-expression")
p2 <- plotQC(sce_2, type = "highest-expression")
p3 <- plotQC(sce_3, type = "highest-expression")
p4 <- plotQC(sce_4, type = "highest-expression")
grid.arrange(p1,p2,p3,p4,ncol=2)

Это работает очень хорошо и не содержит ошибок или предупреждений.

Я хочу создать цикл.Что я сделал, так это

 for (i in 1:length(paths))
    assign(paste0("p",i), plotQC(get(paste0("sce_",i)), type = "highest-expression"))
    grid.arrange(p1,p2,p3,p4,ncol=2)

Второй блок также работает очень хорошо. Однако я бы хотел, чтобы grid.arrange работал, не сообщая вручную о p1, p2, p3, p4, но он должен его обнаружитьколичество объектов р.

Как я могу это сделать?Я работаю в уценке R.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Если вы хотите сохранить цикл, вы также можете попробовать это:

p.list <- list()
for (i in 1:length(paths)){
  p <- plotQC(get(paste0("sce_",i)), type = "highest-expression")
  p.list[[i]] <- p
}
cowplot::plot_grid(plotlist = p.list)

Здесь, вместо назначения графика, мы сохраняем его в списке с именем p.list, а затем создаем вашсетка из списка.Я использовал plot_grid из cowplot, потому что он принимает список графиков в качестве аргумента, и мне легче работать с сеткой графиков в целом.

0 голосов
/ 23 ноября 2018

Хотя все это работает, я думаю, вы согласитесь, что следующее лучше, поскольку ни в коем случае не требуется повторять какие-либо строки или вручную указывать некоторые числа:

sce <- list(sce_1, sce_2, sce_3, sce_4)
p <- lapply(sce, plotQC, type = "highest-expression")
do.call(grid.arrange, c(p, ncol = 2))

В частности,работа со списками намного лучше в таких случаях.Для этого вам, вероятно, следует создать sce_1, ..., sce_4 также по-другому, как элементы списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...