关于屏蔽功能的静音消息

时间:2013-12-02 02:15:46

标签: r knitr

我试图压制消息,解释某些功能被其他软件包掩盖了。我尝试过不同的组合,但都没有提供我需要的东西。

我的大块是:

<<loadpkgs, echo=FALSE, warning=FALSE, message=FALSE>>=
suppressPackageStartupMessages(library(doMC))
suppressPackageStartupMessages(library(aroma.affymetrix))
suppressPackageStartupMessages(library(crlmm))
suppressPackageStartupMessages(library(snpStats))
suppressPackageStartupMessages(library(pd.genomewidesnp.6))
suppressPackageStartupMessages(library(GenomicRanges))
suppressPackageStartupMessages(library(ggbio))
@ 

但是输出(我希望没有)是(在得到的PDF上):

## Loading required package:  foreach
## foreach:  simple, scalable parallel programming from Revolution Analytics
## Use Revolution R for scalability, fault tolerance and more.
## http://www.revolutionanalytics.com
## Loading required package:  iterators
## Loading required package:  parallel
## Loading required package:  R.utils
## Loading required package:  R.oo
## Loading required package:  R.methodsS3
## R.methodsS3 v1.5.2 (2013-10-06) successfully loaded.  See ?R.methodsS3 for help.
## R.oo v1.15.8 (2013-10-10) successfully loaded.  See ?R.oo for help.
##
## Attaching package:  ’R.oo’
##
## The following objects are masked from ’package:methods’:
##
##    getClasses, getMethods

关于如何解决这个问题的任何想法?

4 个答案:

答案 0 :(得分:6)

warn.conflicts=FALSE中设置参数library(),如

library(dplyr, warn.conflicts=FALSE)

应该做的伎俩。当可能有数百个或更多内核加载库时,这对并行计算特别有用。

答案 1 :(得分:4)

要删除“正在加载...”消息,请在库调用中使用quietly=TRUE(并继续使用suppressPackageStartupMessages):

suppressPackageStartupMessages(library(gdata, quietly=TRUE))

如果你想让它更紧凑,或许:

pkgs <-c('gdata', 'doMC', 'aroma.affymetrix', 'crlmm', 'snpStats', 
         'pd.genomewidesnp.6', 'GenomicRanges','ggbio')
for(p in pkgs) suppressPackageStartupMessages(library(p, quietly=TRUE, 
                                                      character.only=TRUE))

如果要压制“加载消息”,可能会更安全地进行某种测试。

for(p in pkgs) suppressPackageStartupMessages( stopifnot( 
                                               library(p, quietly=TRUE, 
                                                        logical.return=TRUE, 
                                                        character.only=TRUE)))

答案 2 :(得分:0)

我很困惑你看到了R. *包的那些消息。以下内容:

suppressPackageStartupMessages(library(aroma.affymetrix))

应该是静音的(除了屏蔽对象的警告)。如果你尝试外面的knitr,你还能看到这些消息吗?

/亨里克 (R. *和aroma。*包的作者)

答案 3 :(得分:0)

suppressPackageStartupMessages(library('packageName'))library('packageName', quitely = TRUE)将禁止加载程序包时生成的所有消息,包括“正在加载所需的程序包XYZ”。

该问题提出了一个更为严格的问题,即如何抑制有关冲突的警告,这可以通过library('packageName', warn.conflicts = FALSE)完成。 R 3.6.0通过conflicts.policy选项引入了全局解决方案:

options(conflicts.policy = list(warn = FALSE))
library('packageName')

此政策可能会将意外的警告与预期的警告一起隐藏,因此更安全地明确指定预期的冲突并使用options(conflicts.policy = 'strict') [这是options(conflicts.policy = list(error = TRUE, warn = FALSE))的缩写)。

可以使用can.mask的{​​{1}}参数列出预期的冲突:

library

如果程序包A加载的程序包B掩盖了程序包C中的功能,我们仍然会遇到问题,这似乎是在# 'packageName' may mask any function named 'foo' and 'bar': library('packageName', can.mask = c('foo', 'bar')) # 'packageName' may mask any function in the package 'base': library('packageName', can.mask = list(base = TRUE)) # 'packageName' may mask only the 'base' functions 'foo' and 'bar': library('packageName', can.mask = list(base = c('foo', 'bar'))) 装载了doMC的程序包时掩盖了。我们可以通过为每个要加载的软件包设置“冲突规则”来解决此问题:

R.oo

可以在methods::getClasses文件中指定冲突规则选项,以保存每次加载脚本时显式调用它们的条件。

通过卢克·蒂尔尼(Luke Tierney)的"Managing Search Path Conflicts"获得更多详情。