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.
如果你想加载一个包,为什么不使用require
或library
?
(.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):抑制从全局环境加载的包中的消息的主要内容,如果未能解决你的问题,请参考以下文章