foreach (R):抑制从全局环境加载的包中的消息

Posted

技术标签:

【中文标题】foreach (R):抑制从全局环境加载的包中的消息【英文标题】:foreach (R): suppress Messages from packages loaded from global environment 【发布时间】:2017-01-04 12:00:20 【问题描述】:

我正在使用 .packages = (.packages()) 在我的 foreach 调用中加载在全局环境中加载的几个包。但是,我找不到如何抑制包启动消息。由于它们是为每个分配的核心加载的,因此此列表会变得相当长。 我已经尝试将标准调用(如suppressMessages() 等)包裹在函数调用和.packages 参数周围,但没有成功。

foreach(i = x, .packages = (.packages()))

我在通用函数中使用 foreach 调用,因此它需要适应用户预先加载的任何包。 我可以在 foreach 调用中使用 apply 调用,所有包都加载到全局环境中,但我假设 foreach 需要在其 .packages 参数中加载它?

如果总体上有更好的方法可以做到这一点,请告诉我。

【问题讨论】:

为什么this 没有帮助? 我假设它是因为我在这里没有直接调用library(),但包是用.packages 参数加载的。 在 .packages 的文档中他们写了.packages returns information about package availability. 如果你想加载一个包,为什么不使用requirelibrary (.packages()) 调用返回全局环境中加载的所有包。这些包应由foreach 为每个分配的核心再次显式加载,以避免在使用.packages 参数的函数调用期间出现问题。因此,没有直接的library()call。包因功能用途而异,并且不固定,因此需要交互加载。 【参考方案1】:

这也是一个蹩脚的答案,更多的是一种解决方法。如果你的函数在一个单独的 R 脚本中而不是使用 .packages() 你这样做:

    options( warn = FALSE )
    suppressPackageStartupMessages( library(dplyr) )
    options( warn = FALSE )

调用库时在函数文件中。这将关闭您的包裹的警告并在之后重新打开它们。如果有一个选项,那就太好了。

【讨论】:

【参考方案2】:

我有一个蹩脚的半答案:当您创建集群时,您可以指定 outfile = '/dev/null' 以使工作节点的所有输出静音。问题是,这会阻止您从节点打印任何其他内容...

作为一种解决方法,我按照所述将节点静音,但使用progress bar 至少向用户提供一些信息,尽管不详细。

【讨论】:

以上是关于foreach (R):抑制从全局环境加载的包中的消息的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义函数加载到 R 中的 foreach 循环中?

无法加载从带有标识符的包中的笔尖引用的“”图像

无法加载从带有标识符的包中的笔尖引用的图像

xcassets 中的所有图像,然后如何加载从我的包中的 nib 引用的图像

R:在自编写的包中使用magrittr管道运算符

如何在 R 包中正确使用其他包中的函数