Функция чтения Drake не работает для графиков

Я пытаюсь с трудом стрелять почему Drake участки не отображаются с readd() - Остальная часть трубопровода, похоже, сработала.

Не уверен, что это вызвано minfi::densityPlot или какая-то другая причина; мои мысли поздние, так как это не работает для barplot функция, которая является базой R.

В отчете RMarkdown у меня есть readd(dplot1) и т.д. в кусках, но на выходе NULL

Это код, который у меня есть в моем R/setup.R файл:

library(drake)
library(tidyverse)
library(magrittr)
library(minfi)
library(DNAmArray)
library(methylumi)
library(RColorBrewer)
library(minfiData)
pkgconfig::set_config("drake::strings_in_dots" = "literals") # New file API

# Your custom code is a bunch of functions.
make_beta <- function(rgSet){
        rgSet_betas = minfi::getBeta(rgSet)
}

make_filter <- function(rgSet){
        rgSet_filtered = DNAmArray::probeFiltering(rgSet)
}

Это мое R/plan.R файл:

# The workflow plan data frame outlines what you are going to do
plan <- drake_plan(
        baseDir = system.file("extdata", package = "minfiData"),
        targets = read.metharray.sheet(baseDir),
        rgSet = read.metharray.exp(targets = targets),
        mSetSq = preprocessQuantile(rgSet),
        detP = detectionP(rgSet),
        dplot1 = densityPlot(rgSet, sampGroups=targets$Sample_Group,main="Raw", legend=FALSE),
        dplot2 = densityPlot (getBeta (mSetSq), sampGroups=targets$Sample_Group, main="Normalized", legend=FALSE),
        pal = RColorBrewer::brewer.pal (8,"Dark2"),
        dplot3 = barplot (colMeans (detP[,1:6]), col=pal[ factor (targets$Sample_Group[1:6])], las=2, cex.names=0.8, ylab="Mean detection p-values"),
        report = rmarkdown::render(
                knitr_in("report.Rmd"),
                output_file = file_out("report.html"),

                quiet = TRUE
        )
)

После использования make(plan) похоже, все прошло гладко:

config <- drake_config(plan)
vis_drake_graph(config)

Я могу использовать loadd() загрузить объекты, необходимые для одного из этих графиков, а затем создать графики, например:

loadd(rgSet)
loadd(targets)
densityPlot(rgSet, sampGroups=targets$Sample_Group,main="Raw", legend=FALSE)

Но readd() команда не работает?

Выход в .html для dplot3 выглядит странно...

1 ответ

Решение

К счастью, это ожидаемое поведение. drake цели являются возвращаемыми значениями команд, и поэтому значение dplot3 предполагается, что возвращаемое значение barplot(), Возвращаемое значение barplot() на самом деле не сюжет. Раздел "Значение" файла справки (?barplot) объясняет возвращаемое значение.

A numeric vector (or matrix, when beside = TRUE), say mp, giving the coordinates of all the bar midpoints drawn, useful for adding to the graph.

If beside is true, use colMeans(mp) for the midpoints of each group of bars, see example.

Так, что происходит? Как и в большинстве базовых графических функций, сюжет из barplot() на самом деле побочный эффект. barplot() отправляет график на графическое устройство, а затем возвращает что-то еще пользователю.

Вы рассматривали ggplot2? Возвращаемое значение ggplot() на самом деле объект сюжета, который является более интуитивным. Если вы хотите придерживаться базовой графики, возможно, вы можете сохранить график в выходной файл.

plan <- drake_plan(
  ...,
  dplot3 = {
    pdf(file_out("dplot3.pdf"))
    barplot(...)
    dev.off()
  }
)
Другие вопросы по тегам