1

我正在尝试解决为什么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()命令不起作用?

.htmlfor dplot3中的输出看起来很奇怪......

在此处输入图像描述

4

1 回答 1

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()
  }
)
于 2019-02-07T02:22:31.617 回答