我正试图解决为什么Drake
不会显示readd()
情节的情况-其余的管道似乎仍然有效。
不确定这是由minfi::densityPlot
还是其他原因引起的;我的想法是稍后的,因为它也不适用于以R为基数的barplot
函数。
在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()
命令不起作用吗?
dplot3在.html
中的输出看起来很奇怪...
答案 0 :(得分: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()
}
)