如何在使用R rmarkdown渲染函数时抑制pdfcrop的打印?

问题描述 投票:0回答:3

我试图在调用R rmarkdown渲染函数时,抑制pdfcrop生成的stdout和stderr的打印,但不知道该怎么做。

我已经使用了安静选项来抑制pandoc命令行的打印,但它并没有抑制pdfcrop的打印。

有没有人有一些小技巧来解决这个问题?

下面是我运行的脚本。

Rscript RNASeq_QC_run.R -v 1 --count ~/devel/R/projects/rnaseq_qc/data/DataTest_Count_expression_generic2.txt  --format generic --design ~/devel/R/projects/rnaseq_qc/data/DataTest_Design.txt --outdir test/out5 &>test/out5.log

这里是调用渲染函数的过程

generic_report_path <- system.file("report", "QC_RNASeq_Count_generic.Rmd", package="qc4rnaseq")
generic_report_file <- paste(unlist(strsplit(basename(generic_report_path),".Rmd")), ".pdf", sep="")
render(input=generic_report_path, output_format="pdf_document", output_file=generic_report_file, output_dir=outdir_abs_path, intermediates_dir=outdir_abs_path, quiet=TRUE)

这里是testout5.log的内容: stdout(常规)和stderr(粗体:在**之间)的输出。

**cropping /private/tmp/qc4rnaseq_run/test/out5/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-2-1.pdf**
PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek.
==> 1 page written on `/private/tmp/qc4rnaseq_run/test/out5/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-2-1.pdf'.
**cropping /private/tmp/qc4rnaseq_run/test/out5/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-3-1.pdf**
PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek.
==> 1 page written on `/private/tmp/qc4rnaseq_run/test/out5/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-3-1.pdf'.
**cropping /private/tmp/qc4rnaseq_run/test/out5/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-4-1.pdf**
PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek.
==> 1 page written on `/private/tmp/qc4rnaseq_run/test/out5/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-4-1.pdf'.
Execution time :  7.120109 seconds
r pdf render crop r-markdown
3个回答
0
投票

我找到了一个解决方案,使用suppressMessages函数来抑制消息,尽管它并没有抑制所有的消息,只有那些发送到stderr的消息。

以下是我的修改。

suppressMessages(render(input=generic_report_path, output_format="pdf_document", output_file=generic_report_f
ile, output_dir=outdir_abs_path, intermediates_dir=outdir_abs_path, quiet=TRUE))

现在所有发送到stderr的消息都被抑制了 但那些发送到我的脚本stdout的消息却没有被抑制.

它仍然是那些与pdfcrop相关的打印。

PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek.
==> 1 page written on `/private/tmp/qc4rnaseq_run/test/out7/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-2-1.pdf'.
PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek.
==> 1 page written on `/private/tmp/qc4rnaseq_run/test/out7/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-3-1.pdf'.
PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek.
==> 1 page written on `/private/tmp/qc4rnaseq_run/test/out7/QC_RNASeq_Count_generic_files/figure-latex/unnamed-chunk-4-1.pdf'.

0
投票

封装 render()suppressMessages() 只会压制 message("cropping ", x) 抛出 plot_crop() 函数的输出。pdfcrop 本身,就必须设置 ignore.stdout = TRUE 的内部系统调用中。我刚刚提交了这个功能请求,作为 编织杂志 #1031 在GitHub上。


0
投票

对我来说,有效的方法(不是最漂亮的解决方案)是将函数分配给一个变量。那么它就不会打印任何东西。

q = knitr::plot_crop(pdf_file,quiet = TRUE)
© www.soinside.com 2019 - 2024. All rights reserved.